From: Gurusamy Sarathy Date: Tue, 14 Jul 1998 06:32:58 +0000 (+0000) Subject: add Porting/p4d2p X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=384f7be5bc08c545c16bd631c7ca9f54fc7d23dc;p=p5sagit%2Fp5-mst-13.2.git add Porting/p4d2p p4raw-id: //depot/perl@1485 --- diff --git a/MANIFEST b/MANIFEST index ee50413..ecdaf99 100644 --- a/MANIFEST +++ b/MANIFEST @@ -20,6 +20,7 @@ Porting/config.sh Sample config.sh Porting/config_H Sample config.h Porting/genlog Generate formatted changelogs by querying p4d Porting/makerel Release making utility +Porting/p4d2p Generate standard patches from p4 diffs Porting/patching.pod How to report changes made to Perl Porting/patchls Flexible patch file listing utility Porting/pumpkin.pod Guidelines and hints for Perl maintainers diff --git a/Porting/p4d2p b/Porting/p4d2p new file mode 100755 index 0000000..67780a9 --- /dev/null +++ b/Porting/p4d2p @@ -0,0 +1,84 @@ +#!/l/local/bin/perl -wspi.bak + +# +# reads a perforce style diff on stdin and outputs appropriate headers +# so the diff can be applied with the patch program +# +# Gurusamy Sarathy +# + +BEGIN { + $0 =~ s|.*/||; + if ($h or $help) { + print STDERR < change-123.patch + +USAGE + exit(0); + } + unless (@ARGV) { @ARGV = '-'; undef $^I; } + use vars qw($thisfile $time $file $fnum $v $h $help); + $thisfile = ""; + $time = localtime(time); +} + +my ($cur, $match); +$cur = m<^==== //depot/(.+?)\#\d+.* ====$> ... m<^(\@\@.+\@\@|\*+)$>; + +$match = $1; + +if ($ARGV ne $thisfile) { + warn "processing patchfile [$ARGV]\n" unless $ARGV eq '-'; + $thisfile = $ARGV; +} + +# while we are within range +if ($cur) { + # set the file name after first line + if ($cur == 1) { + $file = $match; + $fnum++; + } + # emit the diff header when we hit last line + elsif ($cur =~ /E0$/) { + my $f = $file; + + # special hack for perl so we can always use "patch -p1" + $f =~ s<^.*?(perl.*?/)><$1>; + + # unified diff + if ($match =~ /^\@/) { + warn "emitting udiff header\n" if $v; + $_ = "Index: $f\n--- $f.~1~\t$time\n+++ $f\t$time\n$_"; + } + # context diff + elsif ($match =~ /^\*/) { + warn "emitting cdiff header\n" if $v; + $_ = "Index: $f\n*** $f.~1~\t$time\n--- $f\t$time\n$_"; + } + } + # see if we hit another patch (i.e. previous patch was empty) + elsif (m<^==== //depot/(.+?)\#\d+.* ====$>) { + $file = $match = $1; + } + # suppress all other lines in the header + else { + $_ = ""; + } + warn "file [$file] line [$cur] file# [$fnum]\n" if $v; +} + +$_ .= "End of Patch.\n" if eof;