From: Ian Jackson Date: Sat, 16 Jun 2018 10:50:17 +0000 (+0100) Subject: git-debrebase: Fix multi-orig handling X-Git-Tag: archive/debian/5.0~41 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=e5fa171de2df26246f6bc1efeb6b101d1588d700 git-debrebase: Fix multi-orig handling Signed-off-by: Ian Jackson --- diff --git a/git-debrebase b/git-debrebase index d9ceb20a..fbf2a58a 100755 --- a/git-debrebase +++ b/git-debrebase @@ -1202,13 +1202,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',