Patchwork D8888: mergeresult: introduce filemap() which yields filename based mapping

login
register
mail settings
Submitter phabricator
Date Aug. 5, 2020, 12:12 p.m.
Message ID <differential-rev-PHID-DREV-yniwe73o2urpcw4l4qgn-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46988/
State Superseded
Headers show

Comments

phabricator - Aug. 5, 2020, 12:12 p.m.
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  We wanted to remove `actions` as this was leaking how we store things internally
  and was direct access to one of the member. This introduces filemap() which
  yields a map of `filename` -> `action, args, msg`.
  
  `mergeresult.actions` has been deleted as it's no longer required.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  hgext/convert/hg.py
  hgext/remotefilelog/__init__.py
  mercurial/merge.py
  mercurial/sparse.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -388,7 +388,7 @@ 
         sparsematch = matcher(repo, [mctx.rev()])
 
     temporaryfiles = []
-    for file, action in pycompat.iteritems(mresult.actions):
+    for file, action in mresult.filemap():
         type, args, msg = action
         files.add(file)
         if sparsematch(file):
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -541,7 +541,7 @@ 
     }
     # We mutate the items in the dict during iteration, so iterate
     # over a copy.
-    for f, action in list(mresult.actions.items()):
+    for f, action in mresult.filemap():
         if narrowmatch(f):
             pass
         elif not branchmerge:
@@ -668,9 +668,13 @@ 
 
         return sum(len(self._actionmapping[a]) for a in actions)
 
-    @property
-    def actions(self):
-        return self._filemapping
+    def filemap(self, sort=False):
+        if sorted:
+            for key, val in sorted(pycompat.iteritems(self._filemapping)):
+                yield key, val
+        else:
+            for key, val in pycompat.iteritems(self._filemapping):
+                yield key, val
 
     @property
     def diverge(self):
@@ -1137,7 +1141,7 @@ 
             ):
                 renamedelete = mresult1.renamedelete
 
-            for f, a in sorted(pycompat.iteritems(mresult1.actions)):
+            for f, a in mresult1.filemap(sort=True):
                 m, args, msg = a
                 repo.ui.debug(b' %s: %s -> %s\n' % (f, msg, m))
                 if f in fbids:
diff --git a/hgext/remotefilelog/__init__.py b/hgext/remotefilelog/__init__.py
--- a/hgext/remotefilelog/__init__.py
+++ b/hgext/remotefilelog/__init__.py
@@ -497,7 +497,7 @@ 
     if isenabled(repo):
         files = []
         sparsematch = repo.maybesparsematch(mctx.rev())
-        for f, (m, actionargs, msg) in pycompat.iteritems(mresult.actions):
+        for f, (m, actionargs, msg) in mresult.filemap():
             if sparsematch and not sparsematch(f):
                 continue
             if m in (
diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -229,7 +229,7 @@ 
             followcopies=False,
         )
 
-        for file, (action, info, msg) in pycompat.iteritems(mresult.actions):
+        for file, (action, info, msg) in mresult.filemap():
             if source.targetfilebelongstosource(file):
                 # If the file belongs to the source repo, ignore the p2
                 # since it will be covered by the existing fileset.