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