[PATCH 2 of 4] manifest: adds manifestctx.readfast

Martin von Zweigbergk martinvonz at google.com
Tue Sep 13 22:43:12 EDT 2016


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.

     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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20160914/1686a0c3/attachment.html>


More information about the Mercurial-devel mailing list