Patchwork D8615: merge: move an inspection of the dirstate from record to calculate phase

login
register
mail settings
Submitter phabricator
Date June 6, 2020, 1:37 a.m.
Message ID <differential-rev-PHID-DREV-c63bsxetpwhsynkvn6nq-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46477/
State Superseded
Headers show

Comments

phabricator - June 6, 2020, 1:37 a.m.
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  The intent is clearly to have `calculateupdates()` figure out what
  actions need to be taken and `recordupdates()` to make necessary
  modifications to the dirstate. However, in the
  `ACTION_PATH_CONFLICT_RESOLVE` case, there was one little inspection
  of copy information done in `recordupdates()`. This patch moves that
  to `calculateupdates()`. That will help with the next patch, which
  makes `merge.update()` work better with `overlayworkingctx` (copies
  should be recorded there too, even though we skip the
  `recordupdates()` step).

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  mercurial/merge.py
  mercurial/mergestate.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/mergestate.py b/mercurial/mergestate.py
--- a/mercurial/mergestate.py
+++ b/mercurial/mergestate.py
@@ -769,8 +769,7 @@ 
 
     # resolve path conflicts
     for f, args, msg in actions.get(ACTION_PATH_CONFLICT_RESOLVE, []):
-        (f0,) = args
-        origf0 = repo.dirstate.copied(f0) or f0
+        (f0, origf0) = args
         repo.dirstate.add(f)
         repo.dirstate.copy(origf0, f)
         if f0 == origf0:
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -460,9 +460,10 @@ 
         if p not in deletedfiles:
             ctxname = bytes(wctx).rstrip(b'+')
             pnew = util.safename(p, ctxname, wctx, set(actions.keys()))
+            porig = wctx[p].copysource() or p
             actions[pnew] = (
                 mergestatemod.ACTION_PATH_CONFLICT_RESOLVE,
-                (p,),
+                (p, porig),
                 b'local path conflict',
             )
             actions[p] = (
@@ -1280,7 +1281,7 @@ 
     # resolve path conflicts (must come before getting)
     for f, args, msg in actions[mergestatemod.ACTION_PATH_CONFLICT_RESOLVE]:
         repo.ui.debug(b" %s: %s -> pr\n" % (f, msg))
-        (f0,) = args
+        (f0, origf0) = args
         if wctx[f0].lexists():
             repo.ui.note(_(b"moving %s to %s\n") % (f0, f))
             wctx[f].audit()