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 ($) {
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;
'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"