bookmarks: prefetch 'lookup' outside of the loop
authorPierre-Yves David <pierre-yves.david@octobus.net>
Wed, 07 Jun 2017 19:21:02 +0100
changeset 32734 b5613bda454e
parent 32733 2b0a8b0f3435
child 32735 d7522f983f37
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)
mercurial/bookmarks.py
--- 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: