D5291: branchmap: build the revbranchcache._namesreverse() only when required
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Nov 21 14:17:56 UTC 2018
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5291
AFFECTED FILES
mercurial/branchmap.py
CHANGE DETAILS
diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
--- a/mercurial/branchmap.py
+++ b/mercurial/branchmap.py
@@ -397,13 +397,13 @@
self._names = []
self._rbcnamescount = len(self._names) # number of names read at
# _rbcsnameslen
- self._namesreverse = dict((b, r) for r, b in enumerate(self._names))
+ self._namesreverse = None
def _clear(self):
self._rbcsnameslen = 0
del self._names[:]
self._rbcnamescount = 0
- self._namesreverse.clear()
+ self._namesreverse = None
self._rbcrevslen = len(self._repo.changelog)
self._rbcrevs = bytearray(self._rbcrevslen * _rbcrecsize)
@@ -453,6 +453,8 @@
"""Retrieve branch info from changelog and update _rbcrevs"""
changelog = self._repo.changelog
b, close = changelog.branchinfo(rev)
+ if self._namesreverse is None:
+ self._namesreverse = dict((b, r) for r, b in enumerate(self._names))
if b in self._namesreverse:
branchidx = self._namesreverse[b]
else:
@@ -467,6 +469,8 @@
def setdata(self, branch, rev, node, close):
"""add new data information to the cache"""
+ if self._namesreverse is None:
+ self._namesreverse = dict((b, r) for r, b in enumerate(self._names))
if branch in self._namesreverse:
branchidx = self._namesreverse[branch]
else:
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list