X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=git-debrebase;h=5de9c14b74f63e42d5628ab355febb89ace3a182;hb=4d04b76e036b801529fd19a1e45bed0a31a3c8dc;hp=9c444195f66a97d506541cd93db29ad67d5a936a;hpb=14940a67eb1525d69a8dade2777f8cd11200307c;p=dgit.git diff --git a/git-debrebase b/git-debrebase index 9c444195..5de9c14b 100755 --- a/git-debrebase +++ b/git-debrebase @@ -846,6 +846,8 @@ sub mergedbreakwaters_anchor ($) { $best_anchor = $panchor if !defined $best_anchor or is_fast_fwd $best_anchor, $panchor; + fail "inconsistent anchors in merged-breakwaters $p->{CommitId}" + unless is_fast_fwd $panchor, $best_anchor; } return $best_anchor; } @@ -1130,7 +1132,11 @@ sub walk ($;$$$) { return $bomb->(); } die "$ty ?"; - } elsif ($ty eq 'VanillaMerge' or $ty eq 'MergedBreakwaters') { + } elsif ($ty eq 'MergedBreakwaters') { + $last_anchor = mergedbreakwaters_anchor $cl; + $build_start->(' MergedBreakwaters', $cur); + last; + } elsif ($ty eq 'VanillaMerge') { # User may have merged unstitched branch(es). We will # have now lost what ffq-prev was then (since the later # pseudomerge may introduce further changes). The effect @@ -1166,9 +1172,6 @@ sub walk ($;$$$) { printdebug "*** MERGE\n"; - # xxx avoid calling walk without nogenerate when - # we have a MergedBreakwater; instead call keycommits ? - my @bwbcmd = (@git, qw(merge-base)); my @ibcmd = (@git, qw(merge-base --all)); my $might_be_in_bw = 1; @@ -1214,14 +1217,14 @@ sub walk ($;$$$) { } if ($ok && $might_be_in_bw) { + # We could rewrite this to contaion the metadata + # declaring it to be MergedBreakwaters, but + # unnecessarily rewriting a merge seems unhelpful. $prline->(" VanillaMerge MergedBreakwaters"); $last_anchor = $best_anchor; $build_start->('MergedBreakwaters', $cur); } - $nomerge->("alleged merged-breakwater is not a breakwater") - unless $ty eq 'VanillaMerge'; - my $bwb = cmdoutput @bwbcmd; # OK, now we have a breakwater base, but we need the merge