# HG changeset patch # User Durham Goode # Date 1473809190 25200 # Node ID 80be4436e4cc37638f1b0ccc0cefbff190fe7e1e # Parent a059b17352ef12f8cca3329f769a35311e91227f manifest: adds manifestctx.readfast This adds a copy of manifest.readfast to manifestctx.readfast and adds a consumer of it. It currently looks like duplicate code, but a future patch causes these functions to diverge as tree concepts are added to the tree version. diff -r a059b17352ef -r 80be4436e4cc mercurial/context.py --- a/mercurial/context.py Tue Sep 13 16:25:21 2016 -0700 +++ b/mercurial/context.py Tue Sep 13 16:26:30 2016 -0700 @@ -824,7 +824,7 @@ """ repo = self._repo cl = repo.unfiltered().changelog - ma = repo.manifest + mfl = repo.manifestlog # fetch the linkrev fr = filelog.rev(fnode) lkr = filelog.linkrev(fr) @@ -849,7 +849,7 @@ if path in ac[3]: # checking the 'files' field. # The file has been touched, check if the content is # similar to the one we search for. - if fnode == ma.readfast(ac[0]).get(path): + if fnode == mfl[ac[0]].readfast().get(path): return a # In theory, we should never get out of that loop without a result. # But if manifest uses a buggy file revision (not children of the diff -r a059b17352ef -r 80be4436e4cc mercurial/manifest.py --- a/mercurial/manifest.py Tue Sep 13 16:25:21 2016 -0700 +++ b/mercurial/manifest.py Tue Sep 13 16:26:30 2016 -0700 @@ -993,6 +993,14 @@ self._data = manifestdict(text) return self._data + def readfast(self): + 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() + def readdelta(self): revlog = self._revlog if revlog._usemanifestv2: @@ -1066,6 +1074,14 @@ md.setflag(f, fl1) return md + def readfast(self): + 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() + class manifest(manifestrevlog): def __init__(self, opener, dir='', dirlogcache=None): '''The 'dir' and 'dirlogcache' arguments are for internal use by @@ -1149,20 +1165,6 @@ d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r)) return manifestdict(d) - def readfast(self, node): - '''use the faster of readdelta or read - - This will return a manifest which is either only the files - added/modified relative to p1, or all files in the - manifest. Which one is returned depends on the codepath used - to retrieve the data. - ''' - r = self.rev(node) - deltaparent = self.deltaparent(r) - if deltaparent != revlog.nullrev and deltaparent in self.parentrevs(r): - return self.readdelta(node) - return self.read(node) - def readshallowfast(self, node): '''like readfast(), but calls readshallowdelta() instead of readdelta() '''