changeset 41042:54c3b4bd01f2

merge: extract helper for creating empty "actions" dict Replicating the set of actions in multiple places is bad. Differential Revision: https://phab.mercurial-scm.org/D5472
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 21 Dec 2018 09:48:30 -0800
parents 3913223417ea
children 92fde28860bb
files hgext/narrow/narrowcommands.py mercurial/merge.py mercurial/sparse.py
diffstat 3 files changed, 24 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/narrow/narrowcommands.py	Mon Dec 03 22:22:23 2018 -0800
+++ b/hgext/narrow/narrowcommands.py	Fri Dec 21 09:48:30 2018 -0800
@@ -316,7 +316,7 @@
                         transactiongetter=tgetter)
 
         repo.setnewnarrowpats()
-        actions = {k: [] for k in 'a am f g cd dc r dm dg m e k p pr'.split()}
+        actions = merge.emptyactions()
         addgaction = actions['g'].append
 
         mf = repo['.'].manifest().matches(newmatch)
--- a/mercurial/merge.py	Mon Dec 03 22:22:23 2018 -0800
+++ b/mercurial/merge.py	Fri Dec 21 09:48:30 2018 -0800
@@ -1541,6 +1541,25 @@
         return (not self.updatedcount and not self.mergedcount
                 and not self.removedcount and not self.unresolvedcount)
 
+def emptyactions():
+    """create an actions dict, to be populated and passed to applyupdates()"""
+    return dict((m, [])
+                for m in (
+                    ACTION_ADD,
+                    ACTION_ADD_MODIFIED,
+                    ACTION_FORGET,
+                    ACTION_GET,
+                    ACTION_CHANGED_DELETED,
+                    ACTION_DELETED_CHANGED,
+                    ACTION_REMOVE,
+                    ACTION_DIR_RENAME_MOVE_LOCAL,
+                    ACTION_LOCAL_DIR_RENAME_GET,
+                    ACTION_MERGE,
+                    ACTION_EXEC,
+                    ACTION_KEEP,
+                    ACTION_PATH_CONFLICT,
+                    ACTION_PATH_CONFLICT_RESOLVE))
+
 def applyupdates(repo, actions, wctx, mctx, overwrite, labels=None):
     """apply the merge action list to the working directory
 
@@ -2090,22 +2109,7 @@
                     del actionbyfile[f]
 
         # Convert to dictionary-of-lists format
-        actions = dict((m, [])
-                       for m in (
-                           ACTION_ADD,
-                           ACTION_ADD_MODIFIED,
-                           ACTION_FORGET,
-                           ACTION_GET,
-                           ACTION_CHANGED_DELETED,
-                           ACTION_DELETED_CHANGED,
-                           ACTION_REMOVE,
-                           ACTION_DIR_RENAME_MOVE_LOCAL,
-                           ACTION_LOCAL_DIR_RENAME_GET,
-                           ACTION_MERGE,
-                           ACTION_EXEC,
-                           ACTION_KEEP,
-                           ACTION_PATH_CONFLICT,
-                           ACTION_PATH_CONFLICT_RESOLVE))
+        actions = emptyactions()
         for f, (m, args, msg) in actionbyfile.iteritems():
             if m not in actions:
                 actions[m] = []
--- a/mercurial/sparse.py	Mon Dec 03 22:22:23 2018 -0800
+++ b/mercurial/sparse.py	Fri Dec 21 09:48:30 2018 -0800
@@ -7,7 +7,6 @@
 
 from __future__ import absolute_import
 
-import collections
 import hashlib
 import os
 
@@ -247,7 +246,7 @@
             actions.append((file, None, message))
             dropped.append(file)
 
-    typeactions = collections.defaultdict(list)
+    typeactions = mergemod.emptyactions()
     typeactions['r'] = actions
     mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], False)
 
@@ -380,7 +379,7 @@
                 fctx = repo[None][file]
                 actions.append((file, (fctx.flags(), False), message))
 
-        typeactions = collections.defaultdict(list)
+        typeactions = mergemod.emptyactions()
         typeactions['g'] = actions
         mergemod.applyupdates(repo, typeactions, repo[None], repo['.'],
                               False)
@@ -483,11 +482,8 @@
                 dropped.append(file)
 
     # Apply changes to disk
-    typeactions = dict((m, [])
-                       for m in 'a f g am cd dc r dm dg m e k p pr'.split())
+    typeactions = mergemod.emptyactions()
     for f, (m, args, msg) in actions.iteritems():
-        if m not in typeactions:
-            typeactions[m] = []
         typeactions[m].append((f, args, msg))
 
     mergemod.applyupdates(repo, typeactions, repo[None], repo['.'], False)