Skip to content
Snippets Groups Projects
Commit dd01834a696f authored by Pierre-Yves David's avatar Pierre-Yves David
Browse files

annotate: reuse ancestry context when adjusting linkrev (issue4532)

The linkrev adjustment will likely do the same ancestry walking multiple time
so we already have an optional mechanism to take advantage of this. Since
2896f53509a7, linkrev adjustment was done lazily to prevent too bad performance
impact on rename computation. However, this laziness created a quadratic
situation in 'annotate'.

Mercurial repo: hg annotate mercurial/commands.py
before:   8.090
after:  36.300

Mozilla repo: hg annotate layout/generic/nsTextFrame.cpp
before:   1.190
after:  290.230


So we setup sharing of the ancestry context in the annotate case too. Linkrev
adjustment still have an impact but it a much more sensible one.

Mercurial repo: hg annotate mercurial/commands.py
before:  36.300
after:   10.230

Mozilla repo: hg annotate layout/generic/nsTextFrame.cpp
before: 290.230
after:    5.560
parent 6136704b975d
No related branches found
No related tags found
No related merge requests found
......@@ -913,6 +913,8 @@
introrev = self.introrev()
if self.rev() != introrev:
base = self.filectx(self.filenode(), changeid=introrev)
ac = self._repo.changelog.ancestors([introrev], inclusive=True)
base._ancestrycontext = ac
# This algorithm would prefer to be recursive, but Python is a
# bit recursion-hostile. Instead we do an iterative
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment