From e5fa171de2df26246f6bc1efeb6b101d1588d700 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 16 Jun 2018 11:50:17 +0100 Subject: [PATCH] git-debrebase: Fix multi-orig handling Signed-off-by: Ian Jackson --- git-debrebase | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) 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', -- 2.30.2