chiark / gitweb /
git-debrebase: new-upstream: fix ff check handling of multi-piece upstreams
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 19 Jun 2018 16:02:27 +0000 (17:02 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 20 Jun 2018 13:29:38 +0000 (14:29 +0100)
Multi-piece combine commits may have n or n+1 parents, depending on
whether the previous new-upstream invocation was snag-free.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
debian/changelog
git-debrebase

index a70ec38..fc7aebb 100644 (file)
@@ -1,6 +1,8 @@
 dgit (5.1~) unstable; urgency=medium
 
   * git-debrebase manpages: Fix typos and etc.
+  * git-debrebase: new-upstream: fix (this time for sure) ff check
+    handling of multi-piece upstreams.
 
  --
 
index 9e8d707..3458b12 100755 (executable)
@@ -1216,11 +1216,13 @@ sub cmd_new_upstream () {
           ) {
            my @oldpieces = (split / /, $1);
            my $old_n_parents = scalar @{ $old_upstream->{Parents} };
-           if (@oldpieces != $old_n_parents) {
+           if ($old_n_parents != @oldpieces &&
+               $old_n_parents != @oldpieces + 1) {
                snag 'upstream-confusing', sprintf
                    "previous upstream combine %s".
-                   " mentions %d pieces (each implying one orig commit)".
-                   " but has %d parents",
+                   " mentions %d pieces (each implying one parent)".
+                   " but has %d parents".
+                   " (one per piece plus maybe a previous combine)",
                    $old_upstream->{CommitId},
                    (scalar @oldpieces),
                    $old_n_parents;
@@ -1233,7 +1235,8 @@ sub cmd_new_upstream () {
                $oldpieces[0] = '';
                foreach my $i (0..$#oldpieces) {
                    my $n = $oldpieces[$i];
-                   $piece->($n, Old => $old_upstream->{CommitId}.'^'.($i+1));
+                   my $hat = 1 + $i + ($old_n_parents - @oldpieces);
+                   $piece->($n, Old => $old_upstream->{CommitId}.'^'.$hat);
                }
            }
        } else {