commit: pass mergestate into _filecommit() instead of re-reading it
authorPulkit Goyal <7895pulkit@gmail.com>
Thu, 03 Sep 2020 14:14:04 +0530
changeset 45443 037e88d453fa
parent 45442 c6e332a451d0
child 45444 f6c67bb4ca03
commit: pass mergestate into _filecommit() instead of re-reading it mergestate reading although cheap is not free. Let's read mergestate once on top and pass it into `_filecommit()`. In upcoming patches, we will be reading mergestate more in `_filecommit()`. Differential Revision: https://phab.mercurial-scm.org/D8984
mercurial/commit.py
tests/test-annotate.t
tests/test-fastannotate-hg.t
--- a/mercurial/commit.py	Fri Sep 11 13:04:05 2020 +0530
+++ b/mercurial/commit.py	Thu Sep 03 14:14:04 2020 +0530
@@ -157,6 +157,7 @@
     m = mctx.read()
     m1 = m1ctx.read()
     m2 = m2ctx.read()
+    ms = mergestate.mergestate.read(repo)
 
     files = metadata.ChangingFiles()
 
@@ -175,7 +176,7 @@
             else:
                 added.append(f)
                 m[f], is_touched = _filecommit(
-                    repo, fctx, m1, m2, linkrev, tr, writefilecopymeta,
+                    repo, fctx, m1, m2, linkrev, tr, writefilecopymeta, ms
                 )
                 if is_touched:
                     if is_touched == 'added':
@@ -211,7 +212,7 @@
 
 
 def _filecommit(
-    repo, fctx, manifest1, manifest2, linkrev, tr, includecopymeta,
+    repo, fctx, manifest1, manifest2, linkrev, tr, includecopymeta, ms,
 ):
     """
     commit an individual file as part of a larger transaction
@@ -226,6 +227,7 @@
         includecopymeta: boolean, set to False to skip storing the copy data
                     (only used by the Google specific feature of using
                     changeset extra as copy source of truth).
+        ms:         mergestate object
 
     output: (filenode, touched)
 
@@ -324,8 +326,10 @@
             fparent2 = nullid
         elif not fparentancestors:
             # TODO: this whole if-else might be simplified much more
-            ms = mergestate.mergestate.read(repo)
-            if ms.extras(fname).get(b'filenode-source') == b'other':
+            if (
+                ms.active()
+                and ms.extras(fname).get(b'filenode-source') == b'other'
+            ):
                 fparent1, fparent2 = fparent2, nullid
 
     # is the file changed?
--- a/tests/test-annotate.t	Fri Sep 11 13:04:05 2020 +0530
+++ b/tests/test-annotate.t	Thu Sep 03 14:14:04 2020 +0530
@@ -481,7 +481,7 @@
   > from __future__ import absolute_import
   > from mercurial import commit, error, extensions, node
   > def _filecommit(orig, repo, fctx, manifest1, manifest2,
-  >                 linkrev, tr, includecopymeta):
+  >                 linkrev, tr, includecopymeta, ms):
   >     fname = fctx.path()
   >     text = fctx.data()
   >     flog = repo.file(fname)
--- a/tests/test-fastannotate-hg.t	Fri Sep 11 13:04:05 2020 +0530
+++ b/tests/test-fastannotate-hg.t	Thu Sep 03 14:14:04 2020 +0530
@@ -484,7 +484,7 @@
   > from __future__ import absolute_import
   > from mercurial import commit, error, extensions, node
   > def _filecommit(orig, repo, fctx, manifest1, manifest2,
-  >                 linkrev, tr, includecopymeta):
+  >                 linkrev, tr, includecopymeta, ms):
   >     fname = fctx.path()
   >     text = fctx.data()
   >     flog = repo.file(fname)