Patchwork D1222: merge: add a config option to disable path conflict checking

login
register
mail settings
Submitter phabricator
Date Oct. 23, 2017, 11:45 p.m.
Message ID <differential-rev-PHID-DREV-ka4pidmfw44zogawwya4-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/25269/
State Superseded
Headers show

Comments

phabricator - Oct. 23, 2017, 11:45 p.m.
sid0 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  We've found a severe perf regression in `hg update` caused by the path conflict
  checking code. The next patch will disable this by default.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/configitems.py
  mercurial/merge.py

CHANGE DETAILS




To: sid0, #hg-reviewers
Cc: mercurial-devel
phabricator - Oct. 24, 2017, 12:41 p.m.
lothiraldan added a comment.


  The `debug` section doesn't seem to exists, could we use 'experimental' instead while we fix the performance regression?

REPOSITORY
  rHG Mercurial

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

To: sid0, #hg-reviewers
Cc: lothiraldan, mercurial-devel
phabricator - Oct. 24, 2017, 7:08 p.m.
sid0 added a comment.


  > The debug section doesn't seem to exists, could we use 'experimental' instead while we fix the performance regression?
  
  Good idea! Done, thanks!

REPOSITORY
  rHG Mercurial

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

To: sid0, #hg-reviewers
Cc: lothiraldan, mercurial-devel

Patch

diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -693,6 +693,7 @@ 
     abortconflicts = set()
     unknownconfig = _getcheckunknownconfig(repo, 'merge', 'checkunknown')
     ignoredconfig = _getcheckunknownconfig(repo, 'merge', 'checkignored')
+    pathconfig = repo.ui.configbool('debug', 'merge.checkpathconflicts')
     if not force:
         def collectconflicts(conflicts, config):
             if config == 'abort':
@@ -704,7 +705,7 @@ 
             if m in ('c', 'dc'):
                 if _checkunknownfile(repo, wctx, mctx, f):
                     fileconflicts.add(f)
-                elif f not in wctx:
+                elif pathconfig and f not in wctx:
                     path = _checkunknowndirs(repo, f)
                     if path is not None:
                         pathconflicts.add(path)
@@ -1139,8 +1140,9 @@ 
                     actions[f] = ('dc', (None, f, f, False, pa.node()),
                                   "prompt deleted/changed")
 
-    # If we are merging, look for path conflicts.
-    checkpathconflicts(repo, wctx, p2, actions)
+    if repo.ui.configbool('debug', 'merge.checkpathconflicts'):
+        # If we are merging, look for path conflicts.
+        checkpathconflicts(repo, wctx, p2, actions)
 
     return actions, diverge, renamedelete
 
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -575,6 +575,9 @@ 
 coreconfigitem('merge', 'checkignored',
     default='abort',
 )
+coreconfigitem('debug', 'merge.checkpathconflicts',
+    default=True,
+)
 coreconfigitem('merge', 'followcopies',
     default=True,
 )