diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-02-25 05:53:33 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-02-25 05:53:33 (GMT) |
commit | 47f8a44dd7296d34825aa0998f3adea948685bca (patch) | |
tree | 44d5ee9d0c7473376758e015fa128002a6cb3dc8 /Reintegrate | |
parent | 21de0506514eecf666f8aa131b087a2feadb55ab (diff) | |
download | git-47f8a44dd7296d34825aa0998f3adea948685bca.zip git-47f8a44dd7296d34825aa0998f3adea948685bca.tar.gz git-47f8a44dd7296d34825aa0998f3adea948685bca.tar.bz2 |
Meta/Reintegrate: use older editions of what's cooking report as needed
When down-merging old topics that graduated to 'master' some time
ago to maintenance tracks, Meta/whats-cooking.txt that is checked
out would no longer have the release notes entry for the topics.
Look for recent editions of what's cooking report in such a case.
Diffstat (limited to 'Reintegrate')
-rwxr-xr-x | Reintegrate | 59 |
1 files changed, 39 insertions, 20 deletions
diff --git a/Reintegrate b/Reintegrate index f6d32b5..48a698f 100755 --- a/Reintegrate +++ b/Reintegrate @@ -36,28 +36,47 @@ annotate_merge () { return 0; } - my ($branch) = $ARGV[0]; - my ($in_section, $in_desc); - my @msg = (); - while (<STDIN>) { - chomp; - if (/^\* $branch /) { - $in_section = 1; - next; - } - last if (/^[-*\[]/ && $in_section); - next unless $in_section; - s/^\s+//; - if (/^$/) { - $in_desc = 1; + sub read_message { + my ($fh, $branch) = @_; + my ($in_section, $in_desc); + my @msg = (); + while (<$fh>) { + chomp; + if (/^\* $branch /) { + $in_section = 1; + next; + } + last if (/^[-*\[]/ && $in_section); + next unless $in_section; + s/^\s+//; + if (/^$/) { + $in_desc = 1; + } + next unless ($in_section && $in_desc); + next if (/Originally merged to '\''next'\'' on ([-0-9]+)/); + next if (wildo_match($_)); + push @msg, "$_\n"; } - next unless ($in_section && $in_desc); - next if (/Originally merged to '\''next'\'' on ([-0-9]+)/); - next if (wildo_match($_)); - push @msg, "$_\n"; + return ($in_section, @msg); } - if ($in_section && @msg) { + my ($branch) = $ARGV[0]; + my ($fh, $in_section, @msg); + if (open $fh, "<", "Meta/whats-cooking.txt") { + ($in_section, @msg) = read_message($fh, $branch); + } + if (!@msg) { + open my $revs, "-|", + qw(git -C Meta rev-list -32 HEAD -- whats-cooking.txt); + while (my $rev = <$revs>) { + chomp($rev); + open $fh, "-|", + qw(git -C Meta cat-file blob), "$rev:whats-cooking.txt"; + ($in_section, @msg) = read_message($fh, $branch); + last if (@msg); + } + } + if (@msg) { open(my $fh, "-|", qw(git cat-file commit HEAD)); my @original = (<$fh>); close $fh; @@ -86,7 +105,7 @@ annotate_merge () { print $fh @final; close $fh; } - ' <Meta/whats-cooking.txt "$1" + ' "$1" } case "$generate" in |