foreach my $p (@$ps) {
$prline->(" VanillaMerge ".$p->{Ix});
if (!is_fast_fwd $p->{Anchor}, $best_anchor) {
- $nomerge->('DivergentAnchor');
+ $nomerge->('divergent anchors');
} elsif ($p->{Anchor} eq $best_anchor) {
print $report " SameAnchor" if $report;
} else {
}
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
# breakwater merge base as an ancestor.
my @ibs =
- grep { is_fast_fwd $bwb, $_ }
grep /./,
split /\n/,
cmdoutput @ibcmd;
- my ($ib) = @ibs
- or $nomerge->("no suitable interchange merge base");
+
+ @ibs or confess 'internal error, expected anchor at least ?';
+
+ my $ib;
+ foreach my $tibix (0..$#ibs) {
+ my $tib = $ibs[$tibix];
+ my $ff = is_fast_fwd $bwb, $tib;
+ next unless $ff;
+ next if $ib;
+ $ib = $tib;
+ }
+
+ $ib or $nomerge->("no suitable interchange merge base");
$prline->(" VanillaMerge Base");
$prprdelim->();
or $nomerge->("interchange merge-base ($ib)'s".
" breakwater ($bbw)".
" != breakwaters' merge-base ($bwb)");
+
grep { $_->{Anchor} eq $ibinfo->{Anchor} } @$ps
or $nomerge->("interchange merge-base ($ib)'s".
" anchor ($ibinfo->{SeriesBase})".
(join ' ', map { $_->{Anchor} } @$ps).
")");
-
$cl->{MergeInterchangeBaseInfo} = $ibinfo;
$cl->{MergeBestAnchor} = $best_anchor;
push @brw_cl, {