Patchwork D11074: resolve: use the `parentchange` context manager to apply merge action

login
register
mail settings
Submitter phabricator
Date July 10, 2021, 9:03 p.m.
Message ID <differential-rev-PHID-DREV-qpmb7xsgpbn56kptb5yz-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49388/
State Superseded
Headers show

Comments

phabricator - July 10, 2021, 9:03 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  In an ideal world, we would not have to do that. However, we are miles away from
  being ready to not have to do it.
  
  So we add this context manager alongside a long comment. This will help use to
  get to the point were have two distinct API with strict rules about when to call
  them.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D11074

AFFECTED FILES
  mercurial/commands.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -6238,7 +6238,20 @@ 
 
         ms.commit()
         branchmerge = repo.dirstate.p2() != repo.nullid
-        mergestatemod.recordupdates(repo, ms.actions(), branchmerge, None)
+        # resolve is not doing a parent change here, however, `record updates`
+        # will call some dirstate API that at intended for parent changes call.
+        # Ideally we would not need this and could implement a lighter version
+        # of the recordupdateslogic that will not have to deal with the part
+        # related to parent changes. However this would requires that:
+        # - we are sure we passed around enough information at update/merge
+        #   time to no longer needs it at `hg resolve time`
+        # - we are sure we store that information well enough to be able to reuse it
+        # - we are the necessary logic to reuse it right.
+        #
+        # All this should eventually happens, but in the mean time, we use this
+        # context manager slightly out of the context it should be.
+        with repo.dirstate.parentchange():
+            mergestatemod.recordupdates(repo, ms.actions(), branchmerge, None)
 
         if not didwork and pats:
             hint = None