diff mercurial/merge.py @ 27742:6b639caa1652

merge: split up checks for unknown and ignored files that differ In some real-world cases it is preferable to allow overwriting ignored files while continuing to abort on unknown files. This primarily happens when we're replacing build artifacts (which are ignored) with checked in files, but continuing to abort on differing files that aren't ignored. We're redefining merge.checkunknown to only control the behavior for files that aren't ignored. That's fine because this config was only very recently introduced and has not made its way into any Mercurial releases yet.
author Siddharth Agarwal <sid0@fb.com>
date Tue, 12 Jan 2016 18:38:49 -0800
parents 3951f132958f
children a33c1c9e769c
line wrap: on
line diff
--- a/mercurial/merge.py	Tue Jan 12 18:17:07 2016 -0800
+++ b/mercurial/merge.py	Tue Jan 12 18:38:49 2016 -0800
@@ -591,7 +591,8 @@
             elif config == 'warn':
                 warnconflicts.update(conflicts)
 
-        config = _getcheckunknownconfig(repo, 'merge', 'checkunknown')
+        unknownconfig = _getcheckunknownconfig(repo, 'merge', 'checkunknown')
+        ignoredconfig = _getcheckunknownconfig(repo, 'merge', 'checkignored')
         for f, (m, args, msg) in actions.iteritems():
             if m in ('c', 'dc'):
                 if _checkunknownfile(repo, wctx, mctx, f):
@@ -600,7 +601,11 @@
                 if _checkunknownfile(repo, wctx, mctx, f, args[0]):
                     conflicts.add(f)
 
-        collectconflicts(conflicts, config)
+        ignoredconflicts = set([c for c in conflicts
+                                if repo.dirstate._ignore(c)])
+        unknownconflicts = conflicts - ignoredconflicts
+        collectconflicts(ignoredconflicts, ignoredconfig)
+        collectconflicts(unknownconflicts, unknownconfig)
         for f in sorted(abortconflicts):
             repo.ui.warn(_("%s: untracked file differs\n") % f)
         if abortconflicts: