[Request] [+-- ] D8875: merge: pass mergeresult obj instead of actions in _checkcollision() (API)
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Aug 5 08:51:19 UTC 2020
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
The goal is to not use the actions dict and replace it with a rich mergeresult
object.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D8875
AFFECTED FILES
mercurial/merge.py
CHANGE DETAILS
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -288,7 +288,7 @@
return actions
-def _checkcollision(repo, wmf, actions):
+def _checkcollision(repo, wmf, mresult):
"""
Check for case-folding collisions.
"""
@@ -296,39 +296,40 @@
narrowmatch = repo.narrowmatch()
if not narrowmatch.always():
pmmf = set(wmf.walk(narrowmatch))
- if actions:
- narrowactions = {}
- for m, actionsfortype in pycompat.iteritems(actions):
- narrowactions[m] = []
- for (f, args, msg) in actionsfortype:
- if narrowmatch(f):
- narrowactions[m].append((f, args, msg))
- actions = narrowactions
+ if mresult:
+ for f, actionsfortype in pycompat.iteritems(mresult.actions):
+ if not narrowmatch(f):
+ mresult.removefile(f)
else:
# build provisional merged manifest up
pmmf = set(wmf)
- if actions:
+ if mresult:
# KEEP and EXEC are no-op
- for m in (
- mergestatemod.ACTION_ADD,
- mergestatemod.ACTION_ADD_MODIFIED,
- mergestatemod.ACTION_FORGET,
- mergestatemod.ACTION_GET,
- mergestatemod.ACTION_CHANGED_DELETED,
- mergestatemod.ACTION_DELETED_CHANGED,
+ for f, args, msg in mresult.getactions(
+ (
+ mergestatemod.ACTION_ADD,
+ mergestatemod.ACTION_ADD_MODIFIED,
+ mergestatemod.ACTION_FORGET,
+ mergestatemod.ACTION_GET,
+ mergestatemod.ACTION_CHANGED_DELETED,
+ mergestatemod.ACTION_DELETED_CHANGED,
+ )
):
- for f, args, msg in actions[m]:
- pmmf.add(f)
- for f, args, msg in actions[mergestatemod.ACTION_REMOVE]:
+ pmmf.add(f)
+ for f, args, msg in mresult.getactions([mergestatemod.ACTION_REMOVE]):
pmmf.discard(f)
- for f, args, msg in actions[mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL]:
+ for f, args, msg in mresult.getactions(
+ [mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL]
+ ):
f2, flags = args
pmmf.discard(f2)
pmmf.add(f)
- for f, args, msg in actions[mergestatemod.ACTION_LOCAL_DIR_RENAME_GET]:
+ for f, args, msg in mresult.getactions(
+ [mergestatemod.ACTION_LOCAL_DIR_RENAME_GET]
+ ):
pmmf.add(f)
- for f, args, msg in actions[mergestatemod.ACTION_MERGE]:
+ for f, args, msg in mresult.getactions([mergestatemod.ACTION_MERGE]):
f1, f2, fa, move, anc = args
if move:
pmmf.discard(f1)
@@ -1960,9 +1961,6 @@
else:
mresult.removefile(f)
- # Convert to dictionary-of-lists format
- actions = mresult.actionsdict
-
if not util.fscasesensitive(repo.path):
# check collision between files only in p2 for clean update
if not branchmerge and (
@@ -1970,7 +1968,7 @@
):
_checkcollision(repo, p2.manifest(), None)
else:
- _checkcollision(repo, wc.manifest(), actions)
+ _checkcollision(repo, wc.manifest(), mresult)
# divergent renames
for f, fl in sorted(pycompat.iteritems(mresult.diverge)):
@@ -2008,6 +2006,9 @@
# note that we're in the middle of an update
repo.vfs.write(b'updatestate', p2.hex())
+ # Convert to dictionary-of-lists format
+ actions = mresult.actionsdict
+
_advertisefsmonitor(
repo, len(actions[mergestatemod.ACTION_GET]), p1.node()
)
To: pulkit, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20200805/c799ac50/attachment-0001.html>
More information about the Mercurial-patches
mailing list