comparison hgsubversion/maps.py @ 1294:9a722b5246df

maps: cache hashes() for the revmap This fix caches the hashes() results for revision map. For big repos the revision map can be huge (>30MB) and this fix is saving us some time (~0.7s per every subsequent call) by avoiding reversing rev dictionary multiple times.
author Mateusz Kwapich <mitrandir@fb.com>
date Fri, 12 Dec 2014 16:32:34 -0800
parents d07ccad28b1a
children ecce8aef4b21
comparison
equal deleted inserted replaced
1293:9e85feb93984 1294:9a722b5246df
192 VERSION = 1 192 VERSION = 1
193 193
194 def __init__(self, meta): 194 def __init__(self, meta):
195 dict.__init__(self) 195 dict.__init__(self)
196 self.meta = meta 196 self.meta = meta
197 self._hashes = None
197 198
198 if os.path.isfile(self.meta.revmap_file): 199 if os.path.isfile(self.meta.revmap_file):
199 self._load() 200 self._load()
200 else: 201 else:
201 self._write() 202 self._write()
202 203
203 def hashes(self): 204 def hashes(self):
204 return dict((v, k) for (k, v) in self.iteritems()) 205 if self._hashes is None:
206 self._hashes = dict((v, k) for (k, v) in self.iteritems())
207 return self._hashes
205 208
206 def branchedits(self, branch, rev): 209 def branchedits(self, branch, rev):
207 check = lambda x: x[0][1] == branch and x[0][0] < rev.revnum 210 check = lambda x: x[0][1] == branch and x[0][0] < rev.revnum
208 return sorted(filter(check, self.iteritems()), reverse=True) 211 return sorted(filter(check, self.iteritems()), reverse=True)
209 212
254 if revnum > self.meta.lastpulled or not self.meta.lastpulled: 257 if revnum > self.meta.lastpulled or not self.meta.lastpulled:
255 self.meta.lastpulled = revnum 258 self.meta.lastpulled = revnum
256 if revnum < self.meta.firstpulled or not self.meta.firstpulled: 259 if revnum < self.meta.firstpulled or not self.meta.firstpulled:
257 self.meta.firstpulled = revnum 260 self.meta.firstpulled = revnum
258 dict.__setitem__(self, (revnum, branch), ha) 261 dict.__setitem__(self, (revnum, branch), ha)
262 if self._hashes is not None:
263 self._hashes[ha] = (revnum, branch)
259 264
260 265
261 class FileMap(object): 266 class FileMap(object):
262 267
263 VERSION = 1 268 VERSION = 1