From patchwork Fri Dec 27 17:06:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D7730: rebase: make sure pruning does not confuse rebase (issue6180) From: phabricator X-Patchwork-Id: 44052 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Fri, 27 Dec 2019 17:06:03 +0000 khanchi97 created this revision. Herald added a reviewer: martinvonz. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY Before this patch, if a user is rebasing a stack of commits and hit a conflict in between and decided to drop that commit (the commit which is being rebased but hit conflict) and pruned it, now what `hg rebase --continue` does is: skip that dropped commit and move on to rebase the next commit and gets confused here because wdir has two parents which is because while we skipped that dropped commit wdir had two parents and we didn't update that to one parent. Changes in test file demonstrate the fixed behavior. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D7730 AFFECTED FILES hgext/rebase.py tests/test-rebase-conflicts.t CHANGE DETAILS To: khanchi97, martinvonz, #hg-reviewers Cc: mercurial-devel diff --git a/tests/test-rebase-conflicts.t b/tests/test-rebase-conflicts.t --- a/tests/test-rebase-conflicts.t +++ b/tests/test-rebase-conflicts.t @@ -478,14 +478,13 @@ $ hg resolve -m (no more unresolved files) continue: hg rebase --continue -XXX: it should have rebased revision 3 since it made changes unrelated to -destination, so no reason to say "its destination already has all its changes" $ hg rebase -c note: not rebasing 2:06a50ac6b5ab "conflict in a", it has no successor rebasing 3:aea370672fd7 "add b" (tip) - note: not rebasing 3:aea370672fd7 "add b" (tip), its destination already has all its changes $ hg tglog - @ 1:draft 'edit a' + @ 4:draft 'add b' + | + o 1:draft 'edit a' | o 0:draft 'add a' diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -594,6 +594,10 @@ adjustdest(repo, rev, self.destmap, self.state, self.skipped) ) self.state[rev] = dest + # since we are done, make sure wdir has one parent (issue6180) + if len(repo[None].parents()) == 2: + p1 = repo[None].p1().node() + repo.setparents(p1) elif self.state[rev] == revtodo: ui.status(_(b'rebasing %s\n') % desc) progressfn(ctx)