[PATCH 7 of 9 V3] manifest: add shallow option to treemanifestctx.readdelta and readfast
Durham Goode
durham at fb.com
Tue Sep 20 19:36:29 UTC 2016
# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1474399441 25200
# Tue Sep 20 12:24:01 2016 -0700
# Node ID f778e735327d24c3ced233c206acb11f65f55ea0
# Parent 22915866409350cbb5302289c05bb65bc1bfd308
manifest: add shallow option to treemanifestctx.readdelta and readfast
The old manifest had different functions for performing shallow reads, shallow
readdeltas, and shallow readfasts. Since a lot of the code is duplicate (and
since those functions don't make sense on a normal manifestctx), let's unify
them into flags on the existing readdelta and readfast functions.
A future diff will change consumers of these functions to use the manifestctx
versions and will delete the old apis.
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1109,7 +1109,7 @@ class manifestctx(object):
self._data = manifestdict(text)
return self._data
- def readfast(self):
+ def readfast(self, shallow=False):
rl = self._revlog
r = rl.rev(self._node)
deltaparent = rl.deltaparent(r)
@@ -1117,7 +1117,7 @@ class manifestctx(object):
return self.readdelta()
return self.read()
- def readdelta(self):
+ def readdelta(self, shallow=False):
revlog = self._revlog
if revlog._usemanifestv2:
# Need to perform a slow delta
@@ -1176,27 +1176,40 @@ class treemanifestctx(object):
def node(self):
return self._node
- def readdelta(self):
- # Need to perform a slow delta
+ def readdelta(self, shallow=False):
revlog = self._revlog
- r0 = revlog.deltaparent(revlog.rev(self._node))
- m0 = treemanifestctx(revlog, revlog.node(r0), dir=self._dir).read()
- m1 = self.read()
- md = treemanifest(dir=self._dir)
- for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
- if n1:
- md[f] = n1
- if fl1:
- md.setflag(f, fl1)
- return md
+ if shallow and revlog._treeondisk and not revlog._usemanifestv2:
+ if revlog._usemanifestv2:
+ raise error.Abort(
+ _("shallow readdelta() not implemented for manifestv2"))
+ r = revlog.rev(self._node)
+ d = mdiff.patchtext(revlog.revdiff(revlog.deltaparent(r), r))
+ return manifestdict(d)
+ else:
+ # Need to perform a slow delta
+ r0 = revlog.deltaparent(revlog.rev(self._node))
+ m0 = treemanifestctx(revlog, revlog.node(r0), dir=self._dir).read()
+ m1 = self.read()
+ md = treemanifest(dir=self._dir)
+ for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems():
+ if n1:
+ md[f] = n1
+ if fl1:
+ md.setflag(f, fl1)
+ return md
- def readfast(self):
+ def readfast(self, shallow=False):
rl = self._revlog
r = rl.rev(self._node)
deltaparent = rl.deltaparent(r)
- if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):
- return self.readdelta()
- return self.read()
+ if (deltaparent != revlog.nullrev and
+ deltaparent in rl.parentrevs(r)):
+ return self.readdelta(shallow=shallow)
+
+ if shallow:
+ return manifestdict(rl.revision(self._node))
+ else:
+ return self.read()
class manifest(manifestrevlog):
def __init__(self, opener, dir='', dirlogcache=None):
More information about the Mercurial-devel
mailing list