<br><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 13, 2016, 16:31 Durham Goode <<a href="mailto:durham@fb.com">durham@fb.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br class="gmail_msg">
# User Durham Goode <<a href="mailto:durham@fb.com" class="gmail_msg" target="_blank">durham@fb.com</a>><br class="gmail_msg">
# Date 1473809190 25200<br class="gmail_msg">
#      Tue Sep 13 16:26:30 2016 -0700<br class="gmail_msg">
# Node ID f5b0e6f84938d661ee32b2303cb17e30a3fbb9df<br class="gmail_msg">
# Parent  f63c46ee248044f73f51a5edc9c7be419df8ff39<br class="gmail_msg">
manifest: adds manifestctx.readfast<br class="gmail_msg">
<br class="gmail_msg">
This adds a copy of manifest.readfast to manifestctx.readfast and adds a<br class="gmail_msg">
consumer of it. It currently looks like duplicate code, but a future patch<br class="gmail_msg">
causes these functions to diverge as tree concepts are added to the tree<br class="gmail_msg">
version.<br class="gmail_msg">
<br class="gmail_msg">
diff --git a/mercurial/context.py b/mercurial/context.py<br class="gmail_msg">
--- a/mercurial/context.py<br class="gmail_msg">
+++ b/mercurial/context.py<br class="gmail_msg">
@@ -824,7 +824,7 @@ class basefilectx(object):<br class="gmail_msg">
         """<br class="gmail_msg">
         repo = self._repo<br class="gmail_msg">
         cl = repo.unfiltered().changelog<br class="gmail_msg">
-        ma = repo.manifest<br class="gmail_msg">
+        mfl = repo.manifestlog<br class="gmail_msg">
         # fetch the linkrev<br class="gmail_msg">
         fr = filelog.rev(fnode)<br class="gmail_msg">
         lkr = filelog.linkrev(fr)<br class="gmail_msg">
@@ -849,7 +849,7 @@ class basefilectx(object):<br class="gmail_msg">
                 if path in ac[3]: # checking the 'files' field.<br class="gmail_msg">
                     # The file has been touched, check if the content is<br class="gmail_msg">
                     # similar to the one we search for.<br class="gmail_msg">
-                    if fnode == ma.readfast(ac[0]).get(path):<br class="gmail_msg">
+                    if fnode == mfl[ac[0]].readfast().get(path):<br class="gmail_msg">
                         return a<br class="gmail_msg">
             # In theory, we should never get out of that loop without a result.<br class="gmail_msg">
             # But if manifest uses a buggy file revision (not children of the<br class="gmail_msg">
diff --git a/mercurial/manifest.py b/mercurial/manifest.py<br class="gmail_msg">
--- a/mercurial/manifest.py<br class="gmail_msg">
+++ b/mercurial/manifest.py<br class="gmail_msg">
@@ -993,6 +993,14 @@ class manifestctx(object):<br class="gmail_msg">
                 self._data = manifestdict(text)<br class="gmail_msg">
         return self._data<br class="gmail_msg">
<br class="gmail_msg">
+    def readfast(self):<br class="gmail_msg">
+        rl = self._revlog<br class="gmail_msg">
+        r = rl.rev(self._node)<br class="gmail_msg">
+        deltaparent = rl.deltaparent(r)<br class="gmail_msg">
+        if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):<br class="gmail_msg">
+            return self.readdelta()<br class="gmail_msg">
+        return self.read()<br class="gmail_msg">
+<br class="gmail_msg">
     def readdelta(self):<br class="gmail_msg">
         revlog = self._revlog<br class="gmail_msg">
         if revlog._usemanifestv2:<br class="gmail_msg">
@@ -1066,6 +1074,14 @@ class treemanifestctx(object):<br class="gmail_msg">
                     md.setflag(f, fl1)<br class="gmail_msg">
         return md<br class="gmail_msg">
<br class="gmail_msg">
+    def readfast(self):<br class="gmail_msg">
+        rl = self._revlog<br class="gmail_msg">
+        r = rl.rev(self._node)<br class="gmail_msg">
+        deltaparent = rl.deltaparent(r)<br class="gmail_msg">
+        if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r):<br class="gmail_msg">
+            return self.readdelta()<br class="gmail_msg">
+        return self.read()<br class="gmail_msg">
+<br class="gmail_msg">
 class manifest(manifestrevlog):<br class="gmail_msg">
     def __init__(self, opener, dir='', dirlogcache=None):<br class="gmail_msg">
         '''The 'dir' and 'dirlogcache' arguments are for internal use by<br class="gmail_msg">
@@ -1149,20 +1165,6 @@ class manifest(manifestrevlog):<br class="gmail_msg">
         d = mdiff.patchtext(self.revdiff(self.deltaparent(r), r))<br class="gmail_msg">
         return manifestdict(d)<br class="gmail_msg">
<br class="gmail_msg">
-    def readfast(self, node):<br class="gmail_msg">
-        '''use the faster of readdelta or read<br class="gmail_msg">
-<br class="gmail_msg">
-        This will return a manifest which is either only the files<br class="gmail_msg">
-        added/modified relative to p1, or all files in the<br class="gmail_msg">
-        manifest. Which one is returned depends on the codepath used<br class="gmail_msg">
-        to retrieve the data.<br class="gmail_msg">
-        '''<br class="gmail_msg">
-        r = self.rev(node)<br class="gmail_msg">
-        deltaparent = self.deltaparent(r)<br class="gmail_msg">
-        if deltaparent != revlog.nullrev and deltaparent in self.parentrevs(r):<br class="gmail_msg">
-            return self.readdelta(node)<br class="gmail_msg">
-        return self.read(node)<br class="gmail_msg">
-<br class="gmail_msg"></blockquote></div><div><br></div><div>While reading the previous patch, I was wondering why you didn't delete readdelta from manifest.manifest. Now I wonder even more.</div><div><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     def readshallowfast(self, node):<br class="gmail_msg">
         '''like readfast(), but calls readshallowdelta() instead of readdelta()<br class="gmail_msg">
         '''<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
Mercurial-devel mailing list<br class="gmail_msg">
<a href="mailto:Mercurial-devel@mercurial-scm.org" class="gmail_msg" target="_blank">Mercurial-devel@mercurial-scm.org</a><br class="gmail_msg">
<a href="https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel" rel="noreferrer" class="gmail_msg" target="_blank">https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel</a><br class="gmail_msg">
</blockquote></div>