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
--- 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 ..