# HG changeset patch # User Pierre-Yves David # Date 1496859662 -3600 # 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 -r 2b0a8b0f3435 -r b5613bda454e 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: