# HG changeset patch # User Yuya Nishihara # Date 1429338423 -32400 # Node ID 8d7d0bf62f9f84fef087c07eef505d5cd5b4c602 # Parent 0bb98eee531d28cd835f83a91cc2aae8be4ce0d9 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 -r 0bb98eee531d -r 8d7d0bf62f9f mercurial/context.py --- a/mercurial/context.py Sat Apr 18 14:10:55 2015 +0900 +++ b/mercurial/context.py Sat Apr 18 15:27:03 2015 +0900 @@ -906,8 +906,15 @@ 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