diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1998-11-29 16:23:30 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-11-29 16:23:30 +0000 |
commit | 1f8488031ad013b6fc4a66ab2503ebf23dbf32aa (patch) | |
tree | e34af2b433e9cf23dad50131392bc3891922fc9c /Porting | |
parent | 2d8e6c8d50eaf50f663a5fd184404c73944226e0 (diff) | |
download | perl-1f8488031ad013b6fc4a66ab2503ebf23dbf32aa.tar.gz |
add p4desc (augments 'p4 describe' output with diffs for new files)
p4raw-id: //depot/perl@2388
Diffstat (limited to 'Porting')
-rwxr-xr-x | Porting/p4desc | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/Porting/p4desc b/Porting/p4desc new file mode 100755 index 0000000000..062a6f122b --- /dev/null +++ b/Porting/p4desc @@ -0,0 +1,106 @@ +#!/l/local/bin/perl -wpi.bak + +# +# Munge "p4 describe ..." output to include new files. +# +# Gurusamy Sarathy <gsar@umich.edu> +# + +use vars qw($thisfile $change $file $fnum $h $v $p4port @addfiles); + +BEGIN { + $0 =~ s|^.*/||; + $p4port = $ENV{P4PORT} || 'localhost:1666'; + for (@ARGV) { + if ($p4port =~ /^\s+$/) { + $p4port = $_; + } + elsif (/^-p(.*)$/) { + $p4port = $1 || ' '; + } + elsif (/^-v$/) { + $v++; + } + elsif (/^-h/) { + $h++; + } + else { + push @files, $_; + } + } + unless (@files) { @files = '-'; undef $^I; } + @ARGV = @files; + if ($h) { + print STDERR <<USAGE; +Usage: $0 [-p \$P4PORT] [-v] [-h] [files] + + -p host:port p4 port (e.g. myhost:1666) + -h print this help + -v output progress messages + +A smart 'cat'. When fed the spew from "p4 describe ..." on STDIN, +spits it right out on STDOUT, followed by patches for any new files +detected in the spew. Can also be used to edit insitu a bunch of +files containing said spew. + +WARNING: Currently only emits unified diffs. + +Examples: + p4 describe -du 123 | $0 > change-123.desc + p4 describe -du 123 | $0 | p4d2p > change-123.patch + +USAGE + exit(0); + } + $thisfile = ""; +} + + +if ($ARGV ne $thisfile) { + warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; + $thisfile = $ARGV; +} + +my $cur = m|^Affected files| ... m|^Differences|; + +# while we are within range +if ($cur) { + if (m|^\.\.\. (//depot/.+?#\d+) add$|) { + my $newfile = $1; + push @addfiles, $newfile; + warn "$newfile add, revision != 1!\n" unless $newfile =~ /#1$/; + } + warn "file [$file] line [$cur] file# [$fnum]\n" if $v; +} + +if (/^Change (\d+) by/) { + $_ = "\n\n" . $_ if $change; # start of a new change list + $change = $1; + my $new = newfiles(); + if ($new) { + $_ = $new . $_; + } +} + +if (eof) { + $_ .= newfiles(); +} + +sub newfiles { + my $addfile; + my $ret = ""; + for $addfile (@addfiles) { + my @new = `p4 -p $p4port print $addfile`; + if ($?) { + die "$0: `p4 -p $p4port print $addfile` failed, status[$?]\n"; + } + my $desc = shift @new; # discard initial description + $ret .= "\n==== $addfile (text) ====\n\n"; + my $lines = "," . @new; + $lines = "" if @new < 2; + $ret .= "\@\@ -0,0 +1$lines \@\@\n"; + $ret .= join("+","",@new); + } + @addfiles = (); + return $ret; +} |