Mercurial > public > mercurial-scm > hg
comparison mercurial/branchmap.py @ 40710:50a64c321c1e
branchmap: build the revbranchcache._namesreverse() only when required
On big repositories with a lot of named branches and that also increasing over
time, building of this dict can be expensive and shows up in profile.
For our internal repository, this saves ~0.05 seconds.
Thanks to Yuya for suggesting using util.propertycache() and
util.clearcachedproperty().
Differential Revision: https://phab.mercurial-scm.org/D5291
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Wed, 21 Nov 2018 17:17:26 +0300 |
parents | 5e5c8f2a1eb5 |
children | 3461814417f3 |
comparison
equal
deleted
inserted
replaced
40709:39d29542fe40 | 40710:50a64c321c1e |
---|---|
395 len(repo.changelog)) | 395 len(repo.changelog)) |
396 if self._rbcrevslen == 0: | 396 if self._rbcrevslen == 0: |
397 self._names = [] | 397 self._names = [] |
398 self._rbcnamescount = len(self._names) # number of names read at | 398 self._rbcnamescount = len(self._names) # number of names read at |
399 # _rbcsnameslen | 399 # _rbcsnameslen |
400 self._namesreverse = dict((b, r) for r, b in enumerate(self._names)) | |
401 | 400 |
402 def _clear(self): | 401 def _clear(self): |
403 self._rbcsnameslen = 0 | 402 self._rbcsnameslen = 0 |
404 del self._names[:] | 403 del self._names[:] |
405 self._rbcnamescount = 0 | 404 self._rbcnamescount = 0 |
406 self._namesreverse.clear() | |
407 self._rbcrevslen = len(self._repo.changelog) | 405 self._rbcrevslen = len(self._repo.changelog) |
408 self._rbcrevs = bytearray(self._rbcrevslen * _rbcrecsize) | 406 self._rbcrevs = bytearray(self._rbcrevslen * _rbcrecsize) |
407 util.clearcachedproperty(self, '_namesreverse') | |
408 | |
409 @util.propertycache | |
410 def _namesreverse(self): | |
411 return dict((b, r) for r, b in enumerate(self._names)) | |
409 | 412 |
410 def branchinfo(self, rev): | 413 def branchinfo(self, rev): |
411 """Return branch name and close flag for rev, using and updating | 414 """Return branch name and close flag for rev, using and updating |
412 persistent cache.""" | 415 persistent cache.""" |
413 changelog = self._repo.changelog | 416 changelog = self._repo.changelog |