D4369: treemanifest: avoid loading everything just to get their nodeid

spectral (Kyle Lippincott) phabricator at mercurial-scm.org
Fri Aug 24 05:36:40 UTC 2018


spectral created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4369

AFFECTED FILES
  mercurial/manifest.py

CHANGE DETAILS

diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1171,14 +1171,15 @@
         m1._load()
         m2._load()
         emptytree = treemanifest()
-        # OPT: Do we really need to load everything? Presumably things in lazy
-        # aren't dirty and don't need to be written.
-        self._loadalllazy()
-        m1._loadalllazy()
-        m2._loadalllazy()
+        def getnode(m, d):
+            ld = m._lazydirs.get(d)
+            if ld:
+                return ld[1]
+            return m._dirs.get(d, emptytree)._node
+
         for d, subm in self._dirs.iteritems():
-            subp1 = m1._dirs.get(d, emptytree)._node
-            subp2 = m2._dirs.get(d, emptytree)._node
+            subp1 = getnode(m1, d)
+            subp2 = getnode(m2, d)
             if subp1 == revlog.nullid:
                 subp1, subp2 = subp2, subp1
             writesubtree(subm, subp1, subp2)



To: spectral, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list