Mercurial > hg
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 |