D8984: commit: pass mergestate into _filecommit() instead of re-reading it
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Sat Sep 5 07:09:35 UTC 2020
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
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()`.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D8984
AFFECTED FILES
mercurial/commit.py
tests/test-annotate.t
tests/test-fastannotate-hg.t
CHANGE DETAILS
diff --git a/tests/test-fastannotate-hg.t b/tests/test-fastannotate-hg.t
--- a/tests/test-fastannotate-hg.t
+++ b/tests/test-fastannotate-hg.t
@@ -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=None):
> fname = fctx.path()
> text = fctx.data()
> flog = repo.file(fname)
diff --git a/tests/test-annotate.t b/tests/test-annotate.t
--- a/tests/test-annotate.t
+++ b/tests/test-annotate.t
@@ -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=None):
> fname = fctx.path()
> text = fctx.data()
> flog = repo.file(fname)
diff --git a/mercurial/commit.py b/mercurial/commit.py
--- a/mercurial/commit.py
+++ b/mercurial/commit.py
@@ -157,6 +157,9 @@
m = mctx.read()
m1 = m1ctx.read()
m2 = m2ctx.read()
+ ms = mergestate.mergestate.read(repo)
+ if not ms.active():
+ ms = None
files = metadata.ChangingFiles()
@@ -175,7 +178,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 +214,7 @@
def _filecommit(
- repo, fctx, manifest1, manifest2, linkrev, tr, includecopymeta,
+ repo, fctx, manifest1, manifest2, linkrev, tr, includecopymeta, ms=None,
):
"""
commit an individual file as part of a larger transaction
@@ -226,6 +229,8 @@
individual: 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 (None if no mergestate exists
+ while committing)
output: (filenode, touched)
@@ -324,8 +329,7 @@
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 and ms.extras(fname).get(b'filenode-source') == b'other':
fparent1, fparent2 = fparent2, nullid
# is the file changed?
To: pulkit, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list