[PATCH 2 of 4] manifest: adds manifestctx.readfast
Martin von Zweigbergk
martinvonz at google.com
Wed Sep 14 01:27:13 EDT 2016
On Tue, Sep 13, 2016 at 7:43 PM, Martin von Zweigbergk
<martinvonz at google.com> wrote:
>
>
> On Tue, Sep 13, 2016, 16:31 Durham Goode <durham at fb.com> wrote:
>>
>> # 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)
>> -
>
>
> While reading the previous patch, I was wondering why you didn't delete
> readdelta from manifest.manifest. Now I wonder even more.
I see now, manifest.readdelta() is still used from other methods on
manifest, but manifest.readfast() is not, so you can remove it.
>
>> def readshallowfast(self, node):
>> '''like readfast(), but calls readshallowdelta() instead of
>> readdelta()
>> '''
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list