rebase: don't create merge when continuing rebase interrupted by old hg
authorMartin von Zweigbergk <martinvonz@google.com>
Wed, 01 Apr 2020 14:34:21 -0700
changeset 44668 e7af56a0733e
parent 44667 e89b3603d3da
child 44669 c11d98cff883
rebase: don't create merge when continuing rebase interrupted by old hg This fixes the bug described and demonstrated in the previous commit. It does so by practically undoing 8082a77cc3a2 (rebase: remove some redundant setting of dirstate parents, 2020-01-10). Differential Revision: https://phab.mercurial-scm.org/D8356
hgext/rebase.py
tests/test-rebase-interruptions.t
--- a/hgext/rebase.py	Wed Apr 01 13:27:28 2020 -0700
+++ b/hgext/rebase.py	Wed Apr 01 14:34:21 2020 -0700
@@ -631,6 +631,12 @@
                 editor = cmdutil.getcommiteditor(
                     editform=editform, **pycompat.strkwargs(opts)
                 )
+                # We need to set parents again here just in case we're continuing
+                # a rebase started with an old hg version (before 9c9cfecd4600),
+                # because those old versions would have left us with two dirstate
+                # parents, and we don't want to create a merge commit here (unless
+                # we're rebasing a merge commit).
+                self.wctx.setparents(repo[p1].node(), repo[p2].node())
                 newnode = self._concludenode(rev, p1, editor)
             else:
                 # Skip commit if we are collapsing
--- a/tests/test-rebase-interruptions.t	Wed Apr 01 13:27:28 2020 -0700
+++ b/tests/test-rebase-interruptions.t	Wed Apr 01 14:34:21 2020 -0700
@@ -327,21 +327,16 @@
   $ hg rebase --continue
   already rebased 1:27547f69f254 "B" as 45396c49d53b
   rebasing 2:965c486023db "C"
-  warning: orphaned descendants detected, not stripping 27547f69f254, 965c486023db
-BROKEN: we should not have a merge commit here
+  saved backup bundle to $TESTTMP/a4/.hg/strip-backup/27547f69f254-359abdd7-rebase.hg
   $ hg tglog
-  o    6: 567335b578a0 'C'
-  |\
-  | o  5: 45396c49d53b 'B'
-  | |
-  | @  4: ae36e8e3dfd7 'E'
-  | |
-  | o  3: 46b37eabc604 'D'
-  | |
-  o |  2: 965c486023db 'C'
-  | |
-  o |  1: 27547f69f254 'B'
-  |/
+  o  4: d2d25e26288e 'C'
+  |
+  o  3: 45396c49d53b 'B'
+  |
+  @  2: ae36e8e3dfd7 'E'
+  |
+  o  1: 46b37eabc604 'D'
+  |
   o  0: 4a2df7238c3b 'A'
   
   $ cd ..