This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Improve git-deltatool UI and support cherrymaint
authorDavid Golden <dagolden@cpan.org>
Wed, 30 Jun 2010 01:28:24 +0000 (21:28 -0400)
committerDavid Golden <dagolden@cpan.org>
Wed, 30 Jun 2010 01:28:24 +0000 (21:28 -0400)
Allows going 'back' from a section submenu to the main menu for each
commit.

Adds support for calling Porting/cherrymaint to recommend cherrypicking
while reviewing commits for perldelta.

One must recommend cherrymaint before specifying other actions in either
the assign or review modes.  This is hack-ish, but should work well enough
to capture cherrymaint nominations while the release manager is
reviewing commits anyway.

Porting/git-deltatool

index 8ab7c80..ac35441 100755 (executable)
@@ -9,6 +9,7 @@ use warnings;
 package Git::DeltaTool;
 
 use Class::Struct;
+use File::Basename;
 use File::Temp;
 use Getopt::Long;
 use Git::Wrapper;
@@ -343,6 +344,15 @@ sub y_n {
 # handlers
 #--------------------------------------------------------------------------#
 
+sub do_cherry {
+  my ($self, $choice, $log) = @_;
+  my $id = $log->short_id;
+  $self->y_n("Recommend a cherry pick of '$id' to maint?") or return;
+  my $cherrymaint = dirname($0) . "/cherrymaint";
+  system("$^X $cherrymaint --vote $id");
+  return; # false will re-prompt the same commit
+}
+
 sub do_done {
   my ($self, $choice, $log) = @_;
   my $note = $log->notes;
@@ -444,6 +454,8 @@ sub do_platform {
 
 sub do_quit { exit 0 }
 
+sub do_repeat { return 0 }
+
 sub do_skip { return 1 }
 
 sub do_special {
@@ -471,8 +483,9 @@ HERE
 
 sub do_subsection {
   my ($self, $choice, $log) = @_;
+  my @choices = ( $choice->{subsection}, $self->submenu_choices );
   say "For " . _strip_parens($choice->{name}) . ":";
-  return $self->dispatch( $self->prompt( $choice->{subsection} ), $log);
+  return $self->dispatch( $self->prompt( @choices ), $log);
 }
 
 #--------------------------------------------------------------------------#
@@ -482,12 +495,22 @@ sub do_subsection {
 sub action_choices {
   my ($self) = @_;
   state $action_choices = [
+      { name => '(+)Cherrymaint', handler => 'cherry' },
       { name => 'S(k)ip', handler => 'skip' },
       { name => '(Q)uit', handler => 'quit' },
   ];
   return $action_choices;
 }
 
+sub submenu_choices {
+  my ($self) = @_;
+  state $submenu_choices = [
+      { name => '(B)ack', handler => 'repeat' },
+  ];
+  return $submenu_choices;
+}
+
+
 sub review_choices {
   my ($self) = @_;
   state $action_choices = [