From patchwork Thu Apr 16 14:13:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] annotate: always prepare ancestry context of base fctx (issue4600) From: Yuya Nishihara X-Patchwork-Id: 8713 Message-Id: To: mercurial-devel@selenic.com Date: Thu, 16 Apr 2015 23:13:04 +0900 # HG changeset patch # User Yuya Nishihara # Date 1429191233 -32400 # Thu Apr 16 22:33:53 2015 +0900 # Branch stable # Node ID fba3dfd79fd4d763c7cf6eb2e94e20da4e158eec # Parent 1784ca1483921babd792932d1e4575fda1c3359e annotate: always prepare ancestry context of base fctx (issue4600) This patch extends the workaround introduced by dd01834a696f. Even if the base fctx is the same as intorrev, _ancestrycontext must be built for faster _changeid lookup. repo: https://hg.mozilla.org/releases/mozilla-beta command: hg annotate -r 4954faa47dd0 gfx/thebes/gfxWindowsPlatform.cpp before: 52.450 sec after: 1.820 sec diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -919,6 +919,7 @@ class basefilectx(object): introrev = self.introrev() if self.rev() != introrev: base = self.filectx(self.filenode(), changeid=introrev) + if getattr(base, '_ancestrycontext', None) is None: ac = self._repo.changelog.ancestors([introrev], inclusive=True) base._ancestrycontext = ac