bookmarks: prefetch 'lookup' outside of the loop
Skipping the attribute lookup up raise a significant speedup.
Example on a repository with about 4000 bookmarks.
Before:
! wall 0.026027 comb 0.020000 user 0.020000 sys 0.000000 (best of 112)
After:
! wall 0.021580 comb 0.020000 user 0.020000 sys 0.000000 (best of 134)
(This is also in its own changeset to clarify the perf win from another coming
changesets)
--- a/mercurial/bookmarks.py Wed Jun 07 18:22:11 2017 +0100
+++ b/mercurial/bookmarks.py Wed Jun 07 19:21:02 2017 +0100
@@ -50,6 +50,7 @@
def __init__(self, repo):
dict.__init__(self)
self._repo = repo
+ lookup = repo.changelog.lookup
try:
bkfile = _getbkfile(repo)
for line in bkfile:
@@ -63,7 +64,7 @@
sha, refspec = line.split(' ', 1)
refspec = encoding.tolocal(refspec)
try:
- self[refspec] = repo.changelog.lookup(sha)
+ self[refspec] = lookup(sha)
except LookupError:
pass
except IOError as inst: