X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=589fa901af95f5b1158f850b205e9defc20331ac;hp=abf9157e0554fbf7e9496c030af64c9c919fe3cc;hb=332806a67a034c88c2884b516ce2aaf8b317dd25;hpb=49e8f18bc896d9a9dd8aedb3495854c39439c86c diff --git a/git-debrebase b/git-debrebase index abf9157e..589fa901 100755 --- a/git-debrebase +++ b/git-debrebase @@ -51,10 +51,12 @@ See git-debrebase(1), git-debrebase(5), dgit-maint-debrebase(7) (in dgit). END our ($opt_force, $opt_noop_ok, @opt_anchors); -our ($opt_defaultcmd_interactive); +our ($opt_defaultcmd_interactive, $opt_save_wreckage); our $us = qw(git-debrebase); +our $wrecknoteprefix = 'refs/debrebase-wreckage'; + $|=1; sub badusage ($) { @@ -373,6 +375,25 @@ sub merge_failed ($$) { my @m; push @m, "Merge resolution failed: $emsg"; + $opt_save_wreckage //= do { + my $c = cfg 'git-debrebase.merge.save-wreckage', 1; + # ^ xxx documentation + $c && $c =~ m/^[1ty]/; + }; + + if ($opt_save_wreckage) { + my @updates; + git_for_each_ref("$wrecknoteprefix/*", sub { + my ($objid,$objtype,$fullrefname,$reftail) = @_; + push @updates, "delete $fullrefname"; + }); + keys %$wrecknotes; + while (my ($k,$v) = each %$wrecknotes) { + push @updates, "create $wrecknoteprefix/$k $v"; + } + run_ref_updates_now "merge failed", \@updates; + push @m, "Wreckage left in $wrecknoteprefix/* as requested."; + } push @m, "See git-debrebase(1) section FAILED MERGES for suggestions."; # ^ xxx this section does not yet exist fail join '', map { "$_\n" } @m; @@ -2608,6 +2629,7 @@ getoptions_main 'anchor=s' => \@opt_anchors, '--dgit=s' => \($dgit[0]), 'force!', + '--save-wreckage', \$opt_save_wreckage, '-i:s' => sub { my ($opt,$val) = @_; badusage "git-debrebase: no cuddling to -i for git-rebase"