[PATCH 2 of 4] manifest: adds manifestctx.readfast
Durham Goode
durham at fb.com
Tue Sep 13 19:30:45 EDT 2016
# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1473809190 25200
# Tue Sep 13 16:26:30 2016 -0700
# Node ID f5b0e6f84938d661ee32b2303cb17e30a3fbb9df
# Parent f63c46ee248044f73f51a5edc9c7be419df8ff39
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 --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -824,7 +824,7 @@ class basefilectx(object):
"""
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 @@ class basefilectx(object):
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 --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -993,6 +993,14 @@ class manifestctx(object):
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 @@ class treemanifestctx(object):
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 @@ class manifest(manifestrevlog):
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()
'''
More information about the Mercurial-devel
mailing list