From c10954df2a6f7ed9f12e12f6e65049d78c9672e4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 11 Aug 2018 16:23:22 +0100 Subject: [PATCH] git-debrebase: merge: Introduce $mwrecknote in walk analysis half We collect various git objects that we may want to present to the user as wreckage. Currently we dump them in $cl and print them out in $nomerge. We'll want to do better than that of course. Also, we don't collect any wreckage for the actual series merge yet. Signed-off-by: Ian Jackson --- git-debrebase | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/git-debrebase b/git-debrebase index 771410ef..2a2d1ed2 100755 --- a/git-debrebase +++ b/git-debrebase @@ -1029,6 +1029,11 @@ sub walk ($;$$$) { fail "something useful about failed merge attempt @_ xxx".Dumper($cl); }; + my $mwrecknote = sub { + my ($reftail, $commitish) = @_; + $cl->{MergeWreckNotes}{$reftail} = $commitish; + }; + my $last_anchor; for (;;) { @@ -1178,6 +1183,8 @@ sub walk ($;$$$) { my $ps = $cl->{Parents}; + $mwrecknote->('vanilla-merge', $cl->{CommitId}); + foreach my $p (@$ps) { $prline->(" VanillaMerge ".$p->{Ix}); $prprdelim->(); @@ -1188,6 +1195,17 @@ sub walk ($;$$$) { $p->{Breakwater} = $p->{SeriesBase} = $pbw; $p->{Anchor} = $panchor; + my $lr = $p->{LeftRight} = (qw(left right))[$p->{Ix}]; + $mwrecknote->("$lr-input", $p->{CommitId}); + + my $mwrecknote_parent = sub { + my ($which) = @_; + $mwrecknote->("$lr-".(lc $which), $p->{$which}); + }; + $mwrecknote_parent->('Laundered'); + $mwrecknote_parent->('Breakwater'); + $mwrecknote_parent->('Anchor'); + $best_anchor = $panchor if !defined $best_anchor or is_fast_fwd $best_anchor, $panchor; @@ -1196,6 +1214,8 @@ sub walk ($;$$$) { " p=$panchor\n"; } + $mwrecknote->('result-anchor', $best_anchor); + foreach my $p (@$ps) { $prline->(" VanillaMerge ".$p->{Ix}); if (!is_fast_fwd $p->{Anchor}, $best_anchor) { @@ -1242,20 +1262,32 @@ sub walk ($;$$$) { @ibs or confess 'internal error, expected anchor at least ?'; my $ib; + my $ibleaf; foreach my $tibix (0..$#ibs) { my $tib = $ibs[$tibix]; my $ff = is_fast_fwd $bwb, $tib; + my $ok = !$ff ? 'rej' : $ib ? 'extra' : 'ok'; + my $tibleaf = "interchange-mbcand-$ok-$tibix"; + $mwrecknote->($tibleaf, $tib); next unless $ff; next if $ib; $ib = $tib; + $ibleaf = $tibleaf; } $ib or $nomerge->("no suitable interchange merge base"); $prline->(" VanillaMerge Base"); $prprdelim->(); - my ($btip, $bbw, $banchor) = + my ($btip, $bbw, $banchor) = eval { walk $ib, 0, $report, $report_lprefix.' '; + }; + $nomerge->("walking interchange branch merge base ($ibleaf): ". + $@) if length $@; + + $mwrecknote->("mergebase-laundered", $btip); + $mwrecknote->("mergebase-breakwater", $bbw); + $mwrecknote->("mergebase-anchor", $banchor); my $ibinfo = { SeriesTip => $btip, SeriesBase => $bbw, -- 2.30.2