Skip to content

Commit f479eb6

Browse files
committed
Meta/cook --havedone to help updating RelNotes
1 parent 82f5aa1 commit f479eb6

File tree

1 file changed

+120
-5
lines changed

1 file changed

+120
-5
lines changed

cook

Lines changed: 120 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,15 @@ sub wildo_flush_topic {
634634
}
635635
}
636636

637+
sub wildo_match {
638+
if (/^Will (?:\S+ ){0,2}(keep|merge|drop|discard|cook|kick|defer|be re-?rolled)[,. ]/ ||
639+
/^Not urgent/ || /^Not ready/ || /^Waiting for / ||
640+
/^Needs? / || /^Expecting / || /^May want to /) {
641+
return 1;
642+
}
643+
return 0;
644+
}
645+
637646
sub wildo {
638647
my (%what, $topic, $last_merge_to_next, $in_section);
639648
my $too_recent = '9999-99-99';
@@ -668,9 +677,7 @@ sub wildo {
668677
next if (/^ /);
669678
next unless defined $topic;
670679

671-
if (/^Will (?:\S+ ){0,2}(keep|merge|drop|discard|cook|kick|defer)[,. ]/ ||
672-
/^Not urgent/ || /^Not ready/ || /^Waiting for / ||
673-
/^Needs? / || /^Expecting / || /^May want to /) {
680+
if (wildo_match($_)) {
674681
wildo_queue(\%what, $_, $topic);
675682
$topic = undef;
676683
}
@@ -704,6 +711,111 @@ sub wildo {
704711
}
705712
}
706713

714+
################################################################
715+
# HavDone
716+
sub havedone_show {
717+
my $topic = shift;
718+
my $str = shift;
719+
my $prefix = " * ";
720+
$str =~ s/\A\n+//;
721+
$str =~ s/\n+\Z//;
722+
723+
print "($topic)\n";
724+
for $str (split(/\n/, $str)) {
725+
print "$prefix$str\n";
726+
$prefix = " ";
727+
}
728+
}
729+
730+
sub havedone_count {
731+
my @range = @_;
732+
my $cnt = `git rev-list --count @range`;
733+
chomp $cnt;
734+
return $cnt;
735+
}
736+
737+
sub havedone {
738+
my $fh;
739+
my %topic = ();
740+
my @topic = ();
741+
my ($topic, $to_maint, %to_maint, %merged);
742+
if (!@ARGV) {
743+
open($fh, '-|',
744+
qw(git rev-list --first-parent -1 master Documentation/RelNotes))
745+
or die "$!: open rev-list";
746+
my ($rev) = <$fh>;
747+
close($fh) or die "$!: close rev-list";
748+
chomp $rev;
749+
@ARGV = ("$rev..master");
750+
}
751+
open($fh, '-|',
752+
qw(git log --first-parent --oneline --reverse), @ARGV)
753+
or die "$!: open log --first-parent";
754+
while (<$fh>) {
755+
my ($sha1, $branch) = /^([0-9a-f]+) Merge branch '(.*)'$/;
756+
next unless $branch;
757+
$topic{$branch} = "";
758+
$merged{$branch} = $sha1;
759+
push @topic, $branch;
760+
}
761+
close($fh) or die "$!: close log --first-parent";
762+
open($fh, "<", "Meta/whats-cooking.txt")
763+
or die "$!: open whats-cooking";
764+
while (<$fh>) {
765+
chomp;
766+
if (/^\[(.*)\]$/) {
767+
# section header
768+
$topic = undef;
769+
next;
770+
}
771+
if (/^\* (\S+) \([-0-9]+\) \d+ commits?$/) {
772+
if (exists $topic{$1}) {
773+
$topic = $1;
774+
$to_maint = 0;
775+
} else {
776+
$topic = undef;
777+
}
778+
next;
779+
}
780+
next if (/^ / || !defined $topic);
781+
if (wildo_match($_)) {
782+
next;
783+
}
784+
$topic{$topic} .= "$_\n";
785+
}
786+
close($fh) or die "$!: close whats-cooking";
787+
788+
for $topic (@topic) {
789+
my $merged = $merged{$topic};
790+
my $in_master = havedone_count("$merged^1..$merged^2");
791+
my $not_in_maint = havedone_count("maint..$merged^2");
792+
if ($in_master == $not_in_maint) {
793+
$to_maint{$topic} = 1;
794+
}
795+
}
796+
797+
my $shown = 0;
798+
for $topic (@topic) {
799+
next if (exists $to_maint{$topic});
800+
havedone_show($topic, $topic{$topic});
801+
print "\n";
802+
$shown++;
803+
}
804+
805+
if ($shown) {
806+
print "-" x 64, "\n";
807+
}
808+
809+
for $topic (@topic) {
810+
next unless (exists $to_maint{$topic});
811+
havedone_show($topic, $topic{$topic});
812+
my $sha1 = `git rev-parse --short $topic`;
813+
chomp $sha1;
814+
print " (merge $sha1 $topic later to maint).\n";
815+
print "\n";
816+
}
817+
}
818+
707819
################################################################
708820
# WhatsCooking
709821

@@ -720,8 +832,9 @@ sub doit {
720832
use Getopt::Long;
721833

722834
my $wildo;
723-
if (!GetOptions("wildo" => \$wildo)) {
724-
print STDERR "$0 [--wildo]";
835+
my $havedone;
836+
if (!GetOptions("wildo" => \$wildo, "havedone" => \$havedone)) {
837+
print STDERR "$0 [--wildo|--havedone]";
725838
exit 1;
726839
}
727840

@@ -730,6 +843,8 @@ if ($wildo) {
730843
push @ARGV, "Meta/whats-cooking.txt";
731844
}
732845
wildo();
846+
} elsif ($havedone) {
847+
havedone();
733848
} else {
734849
doit();
735850
}

0 commit comments

Comments
 (0)