Mercurial > hg
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 |