Patchwork [7,of,8] merge: extract method for checking for conflicting untracked file

login
register
mail settings
Submitter Martin von Zweigbergk
Date Dec. 23, 2014, 12:33 a.m.
Message ID <5fd29e7725ee24e77194.1419294821@martinvonz.mtv.corp.google.com>
Download mbox | patch
Permalink /patch/7209/
State Accepted
Commit 79235b46062c8bb227306242230ea47f912b6643
Headers show

Comments

Martin von Zweigbergk - Dec. 23, 2014, 12:33 a.m.
# HG changeset patch
# User Martin von Zweigbergk <martinvonz@google.com>
# Date 1418543542 28800
#      Sat Dec 13 23:52:22 2014 -0800
# Node ID 5fd29e7725ee24e77194b781b701dfc4d1810e9d
# Parent  a194174c25fd329be8a74f5b10586187c414f85d
merge: extract method for checking for conflicting untracked file

Now that the functionality is collected in one place, let's extract it
to a method.

Patch

diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -305,6 +305,40 @@ 
         and repo.dirstate.normalize(f) not in repo.dirstate
         and mctx[f2].cmp(wctx[f]))
 
+def _checkunknownfiles(repo, wctx, mctx, force, actions):
+    """
+    Considers any actions that care about the presence of conflicting unknown
+    files. For some actions, the result is to abort; for others, it is to
+    choose a different action.
+    """
+    aborts = []
+    if not force:
+        for f, (m, args, msg) in actions.iteritems():
+            if m in ('c', 'dc'):
+                if _checkunknownfile(repo, wctx, mctx, f):
+                    aborts.append(f)
+            elif m == 'dg':
+                if _checkunknownfile(repo, wctx, mctx, f, args[0]):
+                    aborts.append(f)
+
+    for f in sorted(aborts):
+        repo.ui.warn(_("%s: untracked file differs\n") % f)
+    if aborts:
+        raise util.Abort(_("untracked files in working directory differ "
+                           "from files in requested revision"))
+
+    for f, (m, args, msg) in actions.iteritems():
+        if m == 'c':
+            actions[f] = ('g', args, msg)
+        elif m == 'cm':
+            fl2, anc = args
+            different = _checkunknownfile(repo, wctx, mctx, f)
+            if different:
+                actions[f] = ('m', (f, f, None, False, anc),
+                              "remote differs from untracked local")
+            else:
+                actions[f] = ('g', (fl2,), "remote created")
+
 def _forgetremoved(wctx, mctx, branchmerge):
     """
     Forget removed files
@@ -509,33 +543,7 @@ 
                 else:
                     actions[f] = ('dc', (fl2,), "prompt deleted/changed")
 
-    aborts = []
-    if not force:
-        for f, (m, args, msg) in actions.iteritems():
-            if m in ('c', 'dc'):
-                if _checkunknownfile(repo, wctx, p2, f):
-                    aborts.append(f)
-            elif m == 'dg':
-                if _checkunknownfile(repo, wctx, p2, f, args[0]):
-                    aborts.append(f)
-
-    for f in sorted(aborts):
-        repo.ui.warn(_("%s: untracked file differs\n") % f)
-    if aborts:
-        raise util.Abort(_("untracked files in working directory differ "
-                           "from files in requested revision"))
-
-    for f, (m, args, msg) in actions.iteritems():
-        if m == 'c':
-            actions[f] = ('g', args, msg)
-        elif m == 'cm':
-            fl2, anc = args
-            different = _checkunknownfile(repo, wctx, p2, f)
-            if different:
-                actions[f] = ('m', (f, f, None, False, anc),
-                              "remote differs from untracked local")
-            else:
-                actions[f] = ('g', (fl2,), "remote created")
+    _checkunknownfiles(repo, wctx, p2, force, actions)
 
     return actions, diverge, renamedelete