Excerpts from Pierre-Yves David's message of 2016-11-02 00:34:19 +0100: > > On 11/01/2016 09:51 AM, Jun Wu wrote: > > # HG changeset patch > > # User Jun Wu <qu...@fb.com> > > # Date 1477885221 0 > > # Mon Oct 31 03:40:21 2016 +0000 > > # Node ID f6c6598addaa1854f8556bacb732347256964e3e > > # Parent eead0ed124cbc59b9bb5183035aa481af3547677 > > # Available At https://bitbucket.org/quark-zju/hg-draft > > # hg pull https://bitbucket.org/quark-zju/hg-draft -r > > f6c6598addaa > > adjustlinkrev: remove the inclusive parameter > > > > The parameter is only set to False when srcrev=fctx._descendantrev, in which > > case inclusive could also be True with little performance impact. > > linkrev works in two steps: > > 1) find a revision that touch that file > 2) check if the file version is the one we are looking for > > If we drop inclusive here we'll alway have an initial match for (1) > leading to a false check for (2). (2) is not cheap and we would rather > avoid that.
Good catch. I was focused on changelog.i walk but didn't think too much about the changelog.d walk. Feel free to drop this one while I'm thinking about other solutions. > > > Drop this parameter to make the interface cleaner. > > > > diff --git a/mercurial/context.py b/mercurial/context.py > > --- a/mercurial/context.py > > +++ b/mercurial/context.py > > @@ -809,5 +809,5 @@ class basefilectx(object): > > return True > > > > - def _adjustlinkrev(self, path, filelog, fnode, srcrev, > > inclusive=False): > > + def _adjustlinkrev(self, path, filelog, fnode, srcrev): > > """return the first ancestor of <srcrev> introducing <fnode> > > > > @@ -821,5 +821,4 @@ class basefilectx(object): > > :filelog: the filelog of this path > > :srcrev: the changeset revision we search ancestors from > > - :inclusive: if true, the src revision will also be checked > > """ > > repo = self._repo > > @@ -834,5 +833,4 @@ class basefilectx(object): > > # wctx case, used by workingfilectx during mergecopy > > revs = [p.rev() for p in self._repo[None].parents()] > > - inclusive = True # we skipped the real (revless) source > > else: > > revs = [srcrev] > > @@ -846,5 +844,5 @@ class basefilectx(object): > > return lkr > > # fallback to walk through the changelog > > - iteranc = cl.ancestors(revs, lkr, inclusive=inclusive) > > + iteranc = cl.ancestors(revs, lkr, inclusive=True) > > for a in iteranc: > > ac = cl.read(a) # get changeset data (we avoid object creation) > > @@ -875,5 +873,5 @@ class basefilectx(object): > > return self.linkrev() > > return self._adjustlinkrev(self._path, self._filelog, > > self._filenode, > > - self.rev(), inclusive=True) > > + self.rev()) > > > > def _parentfilectx(self, path, fileid, filelog): > > https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel > > > _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel