Patchwork [3,of,6] mergemarkers: make ``plain`` the default scope

login
register
mail settings
Submitter Pierre-Yves David
Date June 10, 2014, 8:50 p.m.
Message ID <a3ebce9245b8c722f6fd.1402433427@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/4965/
State Changes Requested
Headers show

Comments

Pierre-Yves David - June 10, 2014, 8:50 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1402311527 25200
#      Mon Jun 09 03:58:47 2014 -0700
# Node ID a3ebce9245b8c722f6fd7a81048db2a0f5f3177d
# Parent  a0d2858a720b665e594372fc3953fcdb20d1ce52
mergemarkers: make ``plain`` the default scope

While the minimalist approach looks nice at first glance, the unrecoverable
confusion it can runs into, whenever two unrelated content (with some common lines)
are added at the same place, makes it a bad default choice.

See previous changeset for additional documentation of those behavior.

Patch

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -188,13 +188,13 @@  def _premerge(repo, toolconf, files, lab
             raise error.ConfigError(_("%s.premerge not valid "
                                       "('%s' is neither boolean nor %s)") %
                                     (tool, premerge, _valid))
 
     if premerge:
-        scope = ui.config('ui', 'mergemarkersscope', 'minimal')
+        scope = ui.config('ui', 'mergemarkersscope', 'plain')
         r = simplemerge.simplemerge(ui, a, b, c, quiet=True, label=labels,
-                                    no_minimal=(scope == 'plain'))
+                                    no_minimal=(scope != 'minimal'))
         if not r:
             ui.debug(" premerge successful\n")
             return 0
         if premerge != 'keep':
             util.copyfile(back, a) # restore from backup and try again
@@ -217,13 +217,13 @@  def _imerge(repo, mynode, orig, fcd, fco
     if r:
         a, b, c, back = files
 
         ui = repo.ui
 
-        scope = ui.config('ui', 'mergemarkersscope', 'minimal')
+        scope = ui.config('ui', 'mergemarkersscope', 'plain')
         r = simplemerge.simplemerge(ui, a, b, c, label=labels,
-                                    no_minimal=(scope == 'plain'))
+                                    no_minimal=(scope != 'minimal'))
         return True, r
     return False, 0
 
 @internaltool('dump', True)
 def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None):
diff --git a/mercurial/help/config.txt b/mercurial/help/config.txt
--- a/mercurial/help/config.txt
+++ b/mercurial/help/config.txt
@@ -1228,12 +1228,15 @@  User interface controls.
     Defaults to showing the hash, tags, branches, bookmarks, author, and
     the first line of the commit description.
 
 ``mergemarkersscope``
     Set the amount of information included in the markers. The default
-    ``minimal`` reduce the size of conflicting chunk as much as possible.
-    ``plain`` can be used to include the whole content of the conflicting chunk.
+    ``plain`` includes the whole content of the conflicting chunk.
+    Alternatively, ``minimal`` can be used to reduce the size of conflicting
+    chunk as much as possible. ``minimal`` can be heavily confuse when unrelated
+    content added to the same location share some common line (blank, common
+    programming construct) by chance.
 
 ``portablefilenames``
     Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``.
     Default is ``warn``.
     If set to ``warn`` (or ``true``), a warning message is printed on POSIX
diff --git a/tests/test-conflict.t b/tests/test-conflict.t
--- a/tests/test-conflict.t
+++ b/tests/test-conflict.t
@@ -45,17 +45,20 @@ 
   $ hg id
   618808747361+c0c68e4fe667+ tip
 
   $ cat a
   Small Mathematical Series.
+  <<<<<<< local: 618808747361 - test: branch2
   1
   2
   3
-  <<<<<<< local: 618808747361 - test: branch2
   6
   8
   =======
+  1
+  2
+  3
   4
   5
   >>>>>>> other: c0c68e4fe667  - test: branch1
   Hop we are done.
 
@@ -76,17 +79,20 @@  Verify custom conflict markers
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
 
   $ cat a
   Small Mathematical Series.
+  <<<<<<< local: test 2
   1
   2
   3
-  <<<<<<< local: test 2
   6
   8
   =======
+  1
+  2
+  3
   4
   5
   >>>>>>> other: test 1
   Hop we are done.
 
@@ -103,17 +109,20 @@  Verify basic conflict markers
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
 
   $ cat a
   Small Mathematical Series.
+  <<<<<<< local
   1
   2
   3
-  <<<<<<< local
   6
   8
   =======
+  1
+  2
+  3
   4
   5
   >>>>>>> other
   Hop we are done.