chiark / gitweb /
git-debrebase: Break out gbp_pq_export (nfc)
[dgit.git] / git-debrebase
index f4831c3c5b6c4f1a8a23cf58a1ebfeb0c074a7ce..f56ec32e12a9833a15c69c53120d0f3708fc6011 100755 (executable)
@@ -310,6 +310,22 @@ sub any_snags () {
     return $snags_forced || $snags_tripped;
 }
 
+sub gbp_pq_export ($$$) {
+    my ($bname, $base, $tip) = @_;
+    # must be run in a workarea.  $bname and patch-queue/$bname
+    # ought not to exist.  Leaves you on patch-queue/$bname with
+    # the patches staged but not committed.
+    runcmd @git, qw(checkout -q -b), $bname, $base;
+    runcmd @git, qw(checkout -q -b), "patch-queue/$bname", $tip;
+    my @gbp_cmd = (qw(gbp pq export));
+    my $r = system shell_cmd 'exec >../gbp-pq-err 2>&1', @gbp_cmd;
+    if ($r) {
+       { local ($!,$?); copy('../gbp-pq-err', \*STDERR); }
+       failedcmd @gbp_cmd;
+    }
+    runcmd @git, qw(add -f debian/patches);
+}
+
 # classify returns an info hash like this
 #   CommitId => $objid
 #   Hdr => # commit headers, including 1 final newline
@@ -661,14 +677,15 @@ sub keycommits ($;$$$$) {
     return ($anchor, $breakwater);
 }
 
-sub walk ($;$$);
-sub walk ($;$$) {
+sub walk ($;$$$);
+sub walk ($;$$$) {
     my ($input,
-       $nogenerate,$report) = @_;
+       $nogenerate,$report, $report_lprefix) = @_;
     # => ($tip, $breakwater_tip, $last_anchor)
     # (or nothing, if $nogenerate)
 
     printdebug "*** WALK $input ".($nogenerate//0)." ".($report//'-')."\n";
+    $report_lprefix //= '';
 
     # go through commits backwards
     # we generate two lists of commits to apply:
@@ -700,7 +717,7 @@ sub walk ($;$$) {
 
     my $prline = sub {
        return unless $report;
-       print $report $prdelim, @_;
+       print $report $prdelim, $report_lprefix, @_;
        $prdelim = "\n";
     };
 
@@ -1593,6 +1610,9 @@ sub cmd_conclude () {
 }
 
 sub cmd_scrap () {
+    if (currently_rebasing()) {
+       runcmd @git, qw(rebase --abort);
+    }
     my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info();
     if (!$ffq_prev_commitish) {
        fail "No ongoing git-debrebase session." unless $opt_noop_ok;
@@ -1614,15 +1634,7 @@ sub make_patches_staged ($) {
     my ($secret_head, $secret_bw, $last_anchor) = walk $head;
     fresh_workarea();
     in_workarea sub {
-       runcmd @git, qw(checkout -q -b bw), $secret_bw;
-       runcmd @git, qw(checkout -q -b patch-queue/bw), $secret_head;
-       my @gbp_cmd = (qw(gbp pq export));
-       my $r = system shell_cmd 'exec >../gbp-pq-err 2>&1', @gbp_cmd;
-       if ($r) {
-           { local ($!,$?); copy('../gbp-pq-err', \*STDERR); }
-           failedcmd @gbp_cmd;
-       }
-       runcmd @git, qw(add -f debian/patches);
+       gbp_pq_export 'bw', $secret_bw, $secret_head;
     };
 }