-sub merge_series ($$;@) {
- my ($newbase, $base_q, @input_qs) = @_;
+sub merge_failed ($$) {
+ my ($wrecknotes, $emsg) = @_;
+ my @m;
+ push @m, "Merge resolution failed: $emsg";
+
+ changedir $maindir;
+
+ my @updates;
+ merge_wreckage_cleaning \@updates;
+ 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/*.";
+
+ push @m, "See git-debrebase(1) section FAILED MERGES for suggestions.";
+ # ^ xxx this section does not yet exist
+ fail join '', map { "$_\n" } @m;
+}
+
+sub mwrecknote ($$$) {
+ my ($wrecknotes, $reftail, $commitish) = @_;
+ confess unless defined $commitish;
+ printdebug "mwrecknote $reftail $commitish\n";
+ $wrecknotes->{$reftail} = $commitish;
+}
+
+sub merge_series ($$$;@) {
+ my ($newbase, $wrecknotes, $base_q, @input_qs) = @_;