X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=git-debrebase;h=cb0276be1e9778c36d17a0955ecd1e3d0f98ed2b;hp=d9ceb20a24aa132d2813aab9c725807609f05bc9;hb=ef57e3b00db07b4a139682353c16addfb72f1a0f;hpb=8fa9dd51a4602b965d16b970611e04538e08967d diff --git a/git-debrebase b/git-debrebase index d9ceb20a..cb0276be 100755 --- a/git-debrebase +++ b/git-debrebase @@ -561,6 +561,7 @@ sub keycommits ($;$$$) { my ($anchor, $breakwater); my $clogonly; + my $cl; my $x = sub { my ($cb, $tagsfx, $why) = @_; my $m = "branch needs laundering (run git-debrebase): $why"; @@ -569,7 +570,7 @@ sub keycommits ($;$$$) { $cb->("unclean-$tagsfx", $why); }; for (;;) { - my $cl = classify $head; + $cl = classify $head; my $ty = $cl->{Type}; if ($ty eq 'Packaging') { $breakwater //= $clogonly; @@ -1202,13 +1203,29 @@ sub cmd_new_upstream_v0 () { if ($old_upstream && $old_upstream->{Msg} =~ m{^\[git-debrebase }m) { if ($old_upstream->{Msg} =~ - m{^\[git-debrebase upstream-combine \.((?: $extra_orig_namepart_re)+)\:.*\]$}m + m{^\[git-debrebase upstream-combine (\.(?: $extra_orig_namepart_re)+)\:.*\]$}m ) { - my @oldpieces = ('', split / /, $1); - my $parentix = -1 + scalar @{ $old_upstream->{Parents} }; - foreach my $i (0..$#oldpieces) { - my $n = $oldpieces[$i]; - $piece->($n, Old => $old_upstream->{CommitId}.'^'.$parentix); + my @oldpieces = (split / /, $1); + my $old_n_parents = scalar @{ $old_upstream->{Parents} }; + if (@oldpieces != $old_n_parents) { + snag 'upstream-confusing', sprintf + "previous upstream combine %s". + " mentions %d pieces (each implying one orig commit)". + " but has %d parents", + $old_upstream->{CommitId}, + (scalar @oldpieces), + $old_n_parents; + } elsif ($oldpieces[0] ne '.') { + snag 'upstream-confusing', sprintf + "previous upstream combine %s". + " first piece is not \`.'", + $oldpieces[0]; + } else { + $oldpieces[0] = ''; + foreach my $i (0..$#oldpieces) { + my $n = $oldpieces[$i]; + $piece->($n, Old => $old_upstream->{CommitId}.'^'.($i+1)); + } } } else { snag 'upstream-confusing',