comparison mercurial/manifest.py @ 30404:a1beadaa4061

manifest: change treemanifestctx to construct subtrees from the manifestlog Previously, treemanifestctx would directly construct its subtrees. By making it get the subtrees through manifestlog.get() we consolidate all treemanifestctx creation into manifestlog.get() and therefore extensions that need to wrap manifestctx creation (like narrow-hg) can intercept manifestctxs at that single place. This also means fetching subtrees will take advantage of the manifestlog ctx cache now, which it did not before.
author Durham Goode <durham@fb.com>
date Mon, 14 Nov 2016 15:24:07 -0800
parents a431daa93f8c
children 4e1eab73c53d
comparison
equal deleted inserted replaced
30403:a431daa93f8c 30404:a1beadaa4061
1487 elif rl._treeondisk: 1487 elif rl._treeondisk:
1488 m = treemanifest(dir=self._dir) 1488 m = treemanifest(dir=self._dir)
1489 def gettext(): 1489 def gettext():
1490 return rl.revision(self._node) 1490 return rl.revision(self._node)
1491 def readsubtree(dir, subm): 1491 def readsubtree(dir, subm):
1492 return treemanifestctx(self._repo, dir, subm).read() 1492 # Set verify to False since we need to be able to create
1493 # subtrees for trees that don't exist on disk.
1494 return self._repo.manifestlog.get(dir, subm,
1495 verify=False).read()
1493 m.read(gettext, readsubtree) 1496 m.read(gettext, readsubtree)
1494 m.setnode(self._node) 1497 m.setnode(self._node)
1495 self._data = m 1498 self._data = m
1496 else: 1499 else:
1497 text = rl.revision(self._node) 1500 text = rl.revision(self._node)
1529 d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r)) 1532 d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r))
1530 return manifestdict(d) 1533 return manifestdict(d)
1531 else: 1534 else:
1532 # Need to perform a slow delta 1535 # Need to perform a slow delta
1533 r0 = revlog.deltaparent(revlog.rev(self._node)) 1536 r0 = revlog.deltaparent(revlog.rev(self._node))
1534 m0 = treemanifestctx(self._repo, self._dir, revlog.node(r0)).read() 1537 m0 = self._repo.manifestlog.get(self._dir, revlog.node(r0)).read()
1535 m1 = self.read() 1538 m1 = self.read()
1536 md = treemanifest(dir=self._dir) 1539 md = treemanifest(dir=self._dir)
1537 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems(): 1540 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
1538 if n1: 1541 if n1:
1539 md[f] = n1 1542 md[f] = n1