<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>