X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/8d3211447dc655ade96de0339ad122ece55efa9f..97f0421523521ad2e0ff7b14eb38b854a0b9e0a0:/support/patch-update diff --git a/support/patch-update b/support/patch-update index 4ed8446d..c4289820 100755 --- a/support/patch-update +++ b/support/patch-update @@ -15,17 +15,15 @@ $_ = join('', ); close IN; my @extra_files = m{\n([^\s:]+):.*\n\t\S}g; -my $incl_generated_files; - -$incl_generated_files = shift if @ARGV && $ARGV[0] eq '--gen'; +my $incl_generated_files = shift if @ARGV && $ARGV[0] eq '--gen'; system "git-checkout master" and exit 1; - if ($incl_generated_files) { - die "'a' already exists.\n" if -e 'a'; - die "'b' already exists.\n" if -e 'b'; + die "'a' must not exist in the current directory.\n" if -e 'a'; + die "'b' must not exist in the current directory.\n" if -e 'b'; system "./prepare-source && rsync -a @extra_files a/" and exit 1; } +my $last_touch = time; my(@patches, %local_patch); if (@ARGV) { @@ -47,45 +45,92 @@ while () { } close PIPE; +my(%parent, %description); +foreach my $patch (@patches) { + my $branch = ($local_patch{$patch} ? '' : 'origin/') . "patch/$patch"; + open(PIPE, '-|', 'git-diff', "master...$branch", '--', "PATCH.$patch") or die $!; + while () { + last if /^@@ /; + } + my $desc = ''; + while () { + next if /^-/; # huh?? + s/^.//; + if (m#patch -p1 ', "patches/$patch.diff") or die $!; - while () { - if (m#patch -p1 ', "patches/$patch.diff") or die $!; + print OUT $description{$patch}, "\n"; if (system("git-rebase -m $parent") != 0) { print qq|"git-rebase -m $parent" incomplete -- please fix.\n|; $ENV{PS1} = "[$parent] patch/$patch: "; - system $ENV{SHELL}; + system $ENV{SHELL} and exit 1; } - open(PIPE, '-|', 'git-diff', 'master') or die $!; - while () { - last if m{^diff --git a/PATCH b/PATCH$}; - print OUT $_; + if ($incl_generated_files) { + system "./prepare-source && rsync -a @extra_files b/" and exit 1; } - while () { - last if m{^diff --git a/}; + $last_touch = time; + + open(PIPE, '-|', 'git-diff', $parent) or die $!; + DIFF: while () { + while (m{^diff --git a/PATCH}) { + while () { + last if m{^diff --git a/}; + } + last DIFF if !defined $_; + } + print OUT $_; } - print OUT $_, ; close PIPE; if ($incl_generated_files) { - system "./prepare-source && rsync -a @extra_files b/" and exit 1; open(PIPE, '-|', 'diff', '-up', 'a', 'b') or die $!; while () { s/^((?:---|\+\+\+) [^\t]+)\t.*/$1/; @@ -96,10 +141,3 @@ foreach my $patch (@patches) { close OUT; } - -if ($incl_generated_files) { - system "rm -rf a b"; -} - -print "-------- master --------\n"; -system "git-checkout master && ./prepare-source";