X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/18fa91296bb0e85130f8e98e710528a18a20028f..5288be3af7c24814011130306725c24df792cc06:/support/patch-update diff --git a/support/patch-update b/support/patch-update index 2fba7b30..14360c13 100755 --- a/support/patch-update +++ b/support/patch-update @@ -10,23 +10,28 @@ use strict; die "No 'patches' directory present in the current dir.\n" unless -d 'patches'; die "No '.git' directory present in the current dir.\n" unless -d '.git'; -open(IN, '<', 'prepare-source.mak') or die "Couldn't open prepare-source.mak: $!\n"; -$_ = join('', ); +my @extra_files; +open(IN, '<', 'Makefile.in') or die "Couldn't open Makefile.in: $!\n"; +while () { + if (s/^GENFILES=//) { + while (s/\\$//) { + $_ .= ; + } + @extra_files = split(' ', $_); + last; + } +} 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'; - -system "git-checkout master" and exit 1; -my $last_touch = time; +my $incl_generated_files = shift if @ARGV && $ARGV[0] eq '--gen'; +system "git checkout master" and exit 1; if ($incl_generated_files) { 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; + system "make gen && rsync -a @extra_files a/" and exit 1; } +my $last_touch = time; my(@patches, %local_patch); if (@ARGV) { @@ -35,9 +40,9 @@ if (@ARGV) { s{\.diff$} {}; push(@patches, $_); } - open(PIPE, '-|', 'git-branch', '-l') or die $!; + open(PIPE, '-|', 'git', 'branch', '-l') or die $!; } else { - open(PIPE, '-|', 'git-branch', '-a') or die $!; + open(PIPE, '-|', 'git', 'branch', '-a') or die $!; } while () { if (m# origin/patch/(.*)#) { @@ -48,48 +53,91 @@ while () { } close PIPE; +my(%parent, %description); foreach my $patch (@patches) { + my $branch = ($local_patch{$patch} ? '' : 'origin/') . "patch/$patch"; + my $desc = ''; + open(PIPE, '-|', 'git', 'diff', '-U1000', "master...$branch", '--', "PATCH.$patch") or die $!; + while () { + last if /^@@ /; + } + while () { + next unless s/^[ +]//; + if (m#patch -p1 ', "patches/$patch.diff") or die $!; + print OUT $description{$patch}, "\n"; - while () { - if (m#patch -p1 ) { - last if m{^diff --git a/PATCH b/PATCH$}; - print OUT $_; + if ($incl_generated_files) { + system "make gen && 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 $_; + } + next if /^index /; + 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/; @@ -100,11 +148,3 @@ foreach my $patch (@patches) { close OUT; } - -if ($incl_generated_files) { - system "rm -rf a b"; -} - -print "-------- master --------\n"; -sleep 1 if $last_touch == time; -system "git-checkout master && ./prepare-source";