comparison mercurial/manifest.py @ 39518:c29548ba4a75

treemanifest: avoid loading everything just to get their nodeid Differential Revision: https://phab.mercurial-scm.org/D4369
author Kyle Lippincott <spectral@google.com>
date Thu, 23 Aug 2018 00:41:20 -0700
parents 8798be5f04fc
children 154e4f84b51c
comparison
equal deleted inserted replaced
39517:8798be5f04fc 39518:c29548ba4a75
1175 def writesubtrees(self, m1, m2, writesubtree): 1175 def writesubtrees(self, m1, m2, writesubtree):
1176 self._load() # for consistency; should never have any effect here 1176 self._load() # for consistency; should never have any effect here
1177 m1._load() 1177 m1._load()
1178 m2._load() 1178 m2._load()
1179 emptytree = treemanifest() 1179 emptytree = treemanifest()
1180 # OPT: Do we really need to load everything? Presumably things in lazy 1180 def getnode(m, d):
1181 # aren't dirty and don't need to be written. 1181 ld = m._lazydirs.get(d)
1182 self._loadalllazy() 1182 if ld:
1183 m1._loadalllazy() 1183 return ld[1]
1184 m2._loadalllazy() 1184 return m._dirs.get(d, emptytree)._node
1185
1185 for d, subm in self._dirs.iteritems(): 1186 for d, subm in self._dirs.iteritems():
1186 subp1 = m1._dirs.get(d, emptytree)._node 1187 subp1 = getnode(m1, d)
1187 subp2 = m2._dirs.get(d, emptytree)._node 1188 subp2 = getnode(m2, d)
1188 if subp1 == nullid: 1189 if subp1 == nullid:
1189 subp1, subp2 = subp2, subp1 1190 subp1, subp2 = subp2, subp1
1190 writesubtree(subm, subp1, subp2) 1191 writesubtree(subm, subp1, subp2)
1191 1192
1192 def walksubtrees(self, matcher=None): 1193 def walksubtrees(self, matcher=None):