simplemerge: make `localorother` a "mode" instead of a separate thing
authorMartin von Zweigbergk <martinvonz@google.com>
Tue, 07 Dec 2021 17:48:50 -0800
changeset 48509 5151b0f6519e
parent 48508 fa159bb463e6
child 48510 7f633432ca92
simplemerge: make `localorother` a "mode" instead of a separate thing `simplemerge()` takes a `mode` argument, which can be "union", "merge" or "mergediff", and a `localorother` argument, which can be `None`, "local", or "other". The two options are not at all orthogonal -- most combinations don't make sense. Also, at least "union", "local", and "other" are very closely related. Therefore, it makes sense to combine them into one. It probably makes sense to split the `mode` argument into `resolve` and `marker_style`, where the former can be `None`, "union", "local", or "other", and the latter can be "merge", "merge3", "mergediff", or "minimize". This is a good step in that direction whether or not we end up doing that. Differential Revision: https://phab.mercurial-scm.org/D11887
mercurial/filemerge.py
mercurial/simplemerge.py
--- a/mercurial/filemerge.py	Tue Dec 07 14:11:58 2021 -0800
+++ b/mercurial/filemerge.py	Tue Dec 07 17:48:50 2021 -0800
@@ -579,43 +579,24 @@
     )
 
 
-def _imergeauto(
-    repo,
-    mynode,
-    fcd,
-    fco,
-    fca,
-    toolconf,
-    backup,
-    labels=None,
-    localorother=None,
-):
-    """
-    Generic driver for _imergelocal and _imergeother
-    """
-    assert localorother is not None
-    r = simplemerge.simplemerge(
-        repo.ui, fcd, fca, fco, label=labels, localorother=localorother
-    )
-    return True, r
-
-
 @internaltool(b'merge-local', mergeonly, precheck=_mergecheck)
-def _imergelocal(*args, **kwargs):
+def _imergelocal(repo, mynode, fcd, fco, fca, toolconf, backup, labels=None):
     """
     Like :merge, but resolve all conflicts non-interactively in favor
     of the local `p1()` changes."""
-    success, status = _imergeauto(localorother=b'local', *args, **kwargs)
-    return success, status, False
+    return _merge(
+        repo, mynode, fcd, fco, fca, toolconf, backup, labels, b'local'
+    )
 
 
 @internaltool(b'merge-other', mergeonly, precheck=_mergecheck)
-def _imergeother(*args, **kwargs):
+def _imergeother(repo, mynode, fcd, fco, fca, toolconf, backup, labels=None):
     """
     Like :merge, but resolve all conflicts non-interactively in favor
     of the other `p2()` changes."""
-    success, status = _imergeauto(localorother=b'other', *args, **kwargs)
-    return success, status, False
+    return _merge(
+        repo, mynode, fcd, fco, fca, toolconf, backup, labels, b'other'
+    )
 
 
 @internaltool(
--- a/mercurial/simplemerge.py	Tue Dec 07 14:11:58 2021 -0800
+++ b/mercurial/simplemerge.py	Tue Dec 07 17:48:50 2021 -0800
@@ -516,13 +516,17 @@
 
     m3 = Merge3Text(basetext, localtext, othertext)
     extrakwargs = {
-        "localorother": opts.get("localorother", None),
+        "localorother": None,
         'minimize': True,
     }
     if mode == b'union':
         extrakwargs['start_marker'] = None
         extrakwargs['mid_marker'] = None
         extrakwargs['end_marker'] = None
+    elif mode == b'local':
+        extrakwargs['localorother'] = b'local'
+    elif mode == b'other':
+        extrakwargs['localorother'] = b'other'
     elif name_base is not None:
         extrakwargs['base_marker'] = b'|||||||'
         extrakwargs['name_base'] = name_base