summaryrefslogtreecommitdiff
path: root/git-debrebase
diff options
context:
space:
mode:
Diffstat (limited to 'git-debrebase')
-rwxr-xr-xgit-debrebase24
1 files changed, 23 insertions, 1 deletions
diff --git a/git-debrebase b/git-debrebase
index abf9157..589fa90 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"