[PATCH 4 of 4 STABLE] annotate: prepare ancestry context of workingfilectx
Yuya Nishihara
yuya at tcha.org
Sat Apr 18 11:28:14 UTC 2015
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1429338423 -32400
# Sat Apr 18 15:27:03 2015 +0900
# Branch stable
# Node ID e5a525ce04a0ea81adb253479e7ec023a00248d9
# Parent 5551511c8a017481b16c0cdbc4b2deb3d7b01d28
annotate: prepare ancestry context of workingfilectx
_ancestrycontext is necessary for fast lookup of _changeid. Because we can't
compute the ancestors from wctx, we skip to its parents. 'None' is not needed
to be included in _ancestrycontext because it is used for a membership test
of filelog revisions.
repo: https://hg.mozilla.org/releases/mozilla-beta/#062e49bcb2da
command: hg annotate -r 'wdir()' gfx/thebes/gfxWindowsPlatform.cpp
before: 51.520 sec
after: 1.780 sec
diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -906,8 +906,15 @@ class basefilectx(object):
introrev = self.introrev()
if self.rev() != introrev:
base = self.filectx(self.filenode(), changeid=introrev)
- if introrev and getattr(base, '_ancestrycontext', None) is None:
- ac = self._repo.changelog.ancestors([introrev], inclusive=True)
+ if getattr(base, '_ancestrycontext', None) is None:
+ cl = self._repo.changelog
+ if introrev is None:
+ # wctx is not inclusive, but works because _ancestrycontext
+ # is used to test filelog revisions
+ ac = cl.ancestors([p.rev() for p in base.parents()],
+ inclusive=True)
+ else:
+ ac = cl.ancestors([introrev], inclusive=True)
base._ancestrycontext = ac
# This algorithm would prefer to be recursive, but Python is a
More information about the Mercurial-devel
mailing list