chiark / gitweb /
git-debrebase: stitch better
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 16 Feb 2018 09:01:38 +0000 (09:01 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase

index 5fcec54..a853c06 100755 (executable)
@@ -1150,15 +1150,23 @@ sub cmd_stitch () {
     if (!$prev) {
        fail "No ffq-prev to stitch." unless $opt_noop_ok;
     }
-    $prose = ", $prose" if length $prose;
-    runcmd @git, qw(merge -s ours --no-edit -m), <<END;
-Declare fast forward / record previous work
-
-[git-debrebase pseudomerge: stitch$prose]
+    fresh_workarea();
+    my $old_head = get_head();
+    my $new_head = make_commit [ $old_head, $ffq_prev ], [
+       'Declare fast forward / record previous work',
+        "[git-debrebase pseudomerge: stitch$prose]",
+    ];
+    my @upd_cmd = (@git, qw(update-ref --stdin));
+    debugcmd '>|', @upd_cmd;
+    open U, "|-", @upd_cmd or die $!;
+    my $u = <<END;
+update HEAD $new_head $old_head
+delete $ffq_prev $prev
 END
-    # xxx should delete old ffq-prev
-    # xxx should avoid making pseudomerge if not needed
-    # xxx should make pseudomerge in temp tree so can do atomic update
+    printdebug ">= ", $_, "\n" foreach split /\n/, $u;
+    print U $u;
+    printdebug ">\$\n";
+    close U or failedcmd @upd_cmd;
 }
 
 sub cmd_gbp2debrebase () {