chiark / gitweb /
git-debrebase: keycommits: Move up $cl (nfc)
[dgit.git] / git-debrebase
index d9ceb20a24aa132d2813aab9c725807609f05bc9..cb0276be1e9778c36d17a0955ecd1e3d0f98ed2b 100755 (executable)
@@ -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',