summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2018-08-11 16:23:22 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-08-11 17:05:56 +0100
commitc10954df2a6f7ed9f12e12f6e65049d78c9672e4 (patch)
treedfa1e5521e74427cce27acd114cdf5f94a66cb08
parent1d38a8e35e08d9a37393a809f8de4492759f4be3 (diff)
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 <ijackson@chiark.greenend.org.uk>
-rwxr-xr-xgit-debrebase34
1 files changed, 33 insertions, 1 deletions
diff --git a/git-debrebase b/git-debrebase
index 771410e..2a2d1ed 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,