From: Gurusamy Sarathy Date: Sun, 5 May 2002 07:16:37 +0000 (+0000) Subject: p4genpatch: tweak from Andreas to strip leading portion of X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ca8a84916d37c5954bd71220b6d4072accdd6807;p=p5sagit%2Fp5-mst-13.2.git p4genpatch: tweak from Andreas to strip leading portion of path specified in -b (so patch can be applied with "patch -p1") p4raw-id: //depot/perl@16411 --- diff --git a/Porting/p4genpatch b/Porting/p4genpatch index 9e4cbf5..8fc0e1e 100644 --- a/Porting/p4genpatch +++ b/Porting/p4genpatch @@ -15,10 +15,10 @@ use Time::Local; sub correctmtime ($$$); sub Usage (); -my $VERSION = '0.03'; +my $VERSION = '0.04'; $0 =~ s|^.*/||; our(%OPT, @P4opt); -%OPT = ( "d" => "u", b => "//depot/perl/", "D" => "diff" ); +%OPT = ( "d" => "u", b => "//depot/perl", "D" => "diff" ); use Getopt::Long; Getopt::Long::Configure("no_ignore_case"); GetOptions(\%OPT, "b=s", "p=s", "d=s", "D=s", "h", "v", "V") or die Usage; @@ -35,10 +35,12 @@ open my $p4, $system or die "Could not run $system"; my @action; while (<$p4>) { print; - next unless m|$OPT{b}|; + next unless m|($OPT{b})|; + my($prefix) = $1; + $prefix =~ s|/[^/]+$||; # up to the last "/" in the match is to be stripped if (my($file,$action) = m|^\.\.\. (//depot.*)\s(\w+)$|) { next if $action eq "delete"; - push @action, [$action, $file]; + push @action, [$action, $file, $prefix]; } } close $p4; @@ -47,8 +49,9 @@ my $tempdir; print "Differences ...\n"; for my $a (@action) { $tempdir ||= tempdir( "tmp-XXXX", CLEANUP => 1 ); - my($action,$file) = @$a; - my($path,$basename,$number) = $file =~ m|//depot/(.+/)?([^/]+)#(\d+)|; + my($action,$file,$prefix) = @$a; + my($path,$basename,$number) = $file =~ m|\Q$prefix\E/(.+/)?([^/]+)#(\d+)|; + die "Panic: Could not parse file[$file]" unless $number; $path = "" unless defined $path; my($d1,$d2,$prev); $prev = $number-1; @@ -125,14 +128,15 @@ sub correctmtime ($$$) { sub Usage () { qq{Usage: $0 [OPTIONS] patchnumber - -p host:port p4 port (e.g. myhost:1666) - -d diffopt option to pass to diff(1) - -D diff diff(1) to use - -b branch(es) which branches to include (regex) - (default: //depot/perl/) - -v verbose - -h print this help and exit - -V print version number and exit + -p host:port p4 port (e.g. myhost:1666) + -d diffopt option to pass to diff(1) + -D diff diff(1) to use + -b branch(es) which branches to include (regex); everything up + to the last slash of matched portion of path is + stripped on local copy (default: //depot/perl) + -v verbose + -h print this help and exit + -V print version number and exit Fetches all required files from the repository, puts them into a temporary directory with sensible names and sensible modification @@ -142,5 +146,6 @@ Requires repository access. Examples: perl $0 12345 | gzip -c > 12345.gz perl $0 -dc 12345 > change-12345.patch + perl $0 -b //depot/maint-5.6/perl -v 8571 > 8571 }; }