# HG changeset patch # User Pierre-Yves David # Date 2017-06-07 18:21:02 # Node ID b5613bda454efa82e45eb2ed9593ce973dc89303 # Parent 2b0a8b0f343556df416bea749140cda86a0a1b05 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) diff --git a/mercurial/bookmarks.py b/mercurial/bookmarks.py --- a/mercurial/bookmarks.py +++ b/mercurial/bookmarks.py @@ -50,6 +50,7 @@ class bmstore(dict): 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 @@ class bmstore(dict): 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: