mercurial/merge.py
changeset 27657 7b5c8c8a2f8c
parent 27656 57c0d4888ca8
child 27740 da5634e1b8a3
--- a/mercurial/merge.py	Sat Jan 02 03:21:01 2016 -0800
+++ b/mercurial/merge.py	Sat Jan 02 03:11:52 2016 -0800
@@ -573,6 +573,14 @@
     """
     conflicts = set()
     if not force:
+        config = repo.ui.config('merge', 'checkunknown', default='abort')
+        valid = ['abort', 'ignore', 'warn']
+        if config not in valid:
+            validstr = ', '.join(["'" + v + "'" for v in valid])
+            raise error.ConfigError(_("merge.checkunknown not valid "
+                                      "('%s' is none of %s)")
+                                    % (config, validstr))
+
         for f, (m, args, msg) in actions.iteritems():
             if m in ('c', 'dc'):
                 if _checkunknownfile(repo, wctx, mctx, f):
@@ -581,16 +589,21 @@
                 if _checkunknownfile(repo, wctx, mctx, f, args[0]):
                     conflicts.add(f)
 
-        for f in sorted(conflicts):
-            repo.ui.warn(_("%s: untracked file differs\n") % f)
-        if conflicts:
-            raise error.Abort(_("untracked files in working directory differ "
-                                "from files in requested revision"))
+        if config == 'abort':
+            for f in sorted(conflicts):
+                repo.ui.warn(_("%s: untracked file differs\n") % f)
+            if conflicts:
+                raise error.Abort(_("untracked files in working directory "
+                                    "differ from files in requested revision"))
+        elif config == 'warn':
+            for f in sorted(conflicts):
+                repo.ui.warn(_("%s: replacing untracked file\n") % f)
 
     for f, (m, args, msg) in actions.iteritems():
+        backup = f in conflicts
         if m == 'c':
             flags, = args
-            actions[f] = ('g', (flags, False), msg)
+            actions[f] = ('g', (flags, backup), msg)
         elif m == 'cm':
             fl2, anc = args
             different = _checkunknownfile(repo, wctx, mctx, f)
@@ -598,7 +611,7 @@
                 actions[f] = ('m', (f, f, None, False, anc),
                               "remote differs from untracked local")
             else:
-                actions[f] = ('g', (fl2, False), "remote created")
+                actions[f] = ('g', (fl2, backup), "remote created")
 
 def _forgetremoved(wctx, mctx, branchmerge):
     """