merge: disable `m2-vs-ma` optimization if new filenode config is true
authorPulkit Goyal <7895pulkit@gmail.com>
Mon, 14 Sep 2020 14:40:12 +0530
changeset 45580 76d79b80d953
parent 45579 b9d6ab6cdeb4
child 45581 76b69f81629c
merge: disable `m2-vs-ma` optimization if new filenode config is true The `m2-vs-ma` optimization filters out the file which have not changed between second parent and the ancestor of the merge. This results in the m1-vs-m2 diff not processing those files. These files will be required when we are creating new filenode for salvaged cases as we need to track them to store in mergestate that file can be salvaged. Differential Revision: https://phab.mercurial-scm.org/D9027
mercurial/merge.py
--- a/mercurial/merge.py	Mon Sep 14 14:31:23 2020 +0530
+++ b/mercurial/merge.py	Mon Sep 14 14:40:12 2020 +0530
@@ -776,7 +776,13 @@
     # - ma is the same as m1 or m2, which we're just going to diff again later
     # - The caller specifically asks for a full diff, which is useful during bid
     #   merge.
-    if pa not in ([wctx, p2] + wctx.parents()) and not forcefulldiff:
+    # - we are tracking salvaged files specifically hence should process all
+    #   files
+    if (
+        pa not in ([wctx, p2] + wctx.parents())
+        and not forcefulldiff
+        and not repo.ui.configbool(b'experimental', b'merge-track-salvaged')
+    ):
         # Identify which files are relevant to the merge, so we can limit the
         # total m1-vs-m2 diff to just those files. This has significant
         # performance benefits in large repositories.