comparison mercurial/localrepo.py @ 40745:300f8564220f

tags: cache `repo.changelog` access when checking tags nodes The tags reading process checks if the nodes referenced in tags exist. Caching the access to `repo.changelog` provides a large speedup for repositories with many tags. running `hg perftags` in a large private repository before: ! wall 0.393464 comb 0.390000 user 0.330000 sys 0.060000 (median of 25) after: ! wall 0.267711 comb 0.270000 user 0.210000 sys 0.060000 (median of 38)
author Boris Feld <boris.feld@octobus.net>
date Tue, 20 Nov 2018 10:38:15 +0000
parents c93d046d4300
children 41b6245c3fc4
comparison
equal deleted inserted replaced
40744:594e84a2e574 40745:300f8564220f
1415 t = {} 1415 t = {}
1416 if self.changelog.filteredrevs: 1416 if self.changelog.filteredrevs:
1417 tags, tt = self._findtags() 1417 tags, tt = self._findtags()
1418 else: 1418 else:
1419 tags = self._tagscache.tags 1419 tags = self._tagscache.tags
1420 rev = self.changelog.rev
1420 for k, v in tags.iteritems(): 1421 for k, v in tags.iteritems():
1421 try: 1422 try:
1422 # ignore tags to unknown nodes 1423 # ignore tags to unknown nodes
1423 self.changelog.rev(v) 1424 rev(v)
1424 t[k] = v 1425 t[k] = v
1425 except (error.LookupError, ValueError): 1426 except (error.LookupError, ValueError):
1426 pass 1427 pass
1427 return t 1428 return t
1428 1429