Show More
@@ -176,10 +176,7 b' class revlogio(object):' | |||
|
176 | 176 | def parseindex(self, data, inline): |
|
177 | 177 | # call the C implementation to parse the index data |
|
178 | 178 | index, cache = parsers.parse_index2(data, inline) |
|
179 | nodemap = None | |
|
180 | if not data: | |
|
181 | nodemap = {nullid: nullrev} | |
|
182 | return index, nodemap, cache | |
|
179 | return index, None, cache | |
|
183 | 180 | |
|
184 | 181 | def packentry(self, entry, node, version, rev): |
|
185 | 182 | p = _pack(indexformatng, *entry) |
@@ -228,6 +225,8 b' class revlog(object):' | |||
|
228 | 225 | self._shallowroot = shallowroot |
|
229 | 226 | self._parentdelta = 0 |
|
230 | 227 | self._pcache = {} |
|
228 | self._nodecache = {nullid: nullrev} | |
|
229 | self._nodepos = None | |
|
231 | 230 | |
|
232 | 231 | v = REVLOG_DEFAULT_VERSION |
|
233 | 232 | if hasattr(opener, 'options') and 'defversion' in opener.options: |
@@ -274,20 +273,10 b' class revlog(object):' | |||
|
274 | 273 | raise RevlogError(_("index %s is corrupted") % (self.indexfile)) |
|
275 | 274 | self.index, nodemap, self._chunkcache = d |
|
276 | 275 | if nodemap is not None: |
|
277 | self.nodemap = nodemap | |
|
278 | self.rev = self._revmap | |
|
276 | self.nodemap = self._nodecache = nodemap | |
|
279 | 277 | if not self._chunkcache: |
|
280 | 278 | self._chunkclear() |
|
281 | 279 | |
|
282 | @util.propertycache | |
|
283 | def nodemap(self): | |
|
284 | n = {nullid: nullrev} | |
|
285 | i = self.index | |
|
286 | for r in xrange(len(i) - 1): | |
|
287 | n[i[r][7]] = r | |
|
288 | self.rev = self._revmap | |
|
289 | return n | |
|
290 | ||
|
291 | 280 | def tip(self): |
|
292 | 281 | return self.node(len(self.index) - 2) |
|
293 | 282 | def __len__(self): |
@@ -295,20 +284,31 b' class revlog(object):' | |||
|
295 | 284 | def __iter__(self): |
|
296 | 285 | for i in xrange(len(self)): |
|
297 | 286 | yield i |
|
298 | def _revmap(self, node): | |
|
299 | try: | |
|
300 | return self.nodemap[node] | |
|
301 | except KeyError: | |
|
302 | raise LookupError(node, self.indexfile, _('no node')) | |
|
287 | ||
|
288 | @util.propertycache | |
|
289 | def nodemap(self): | |
|
290 | n = self.rev(self.node(0)) | |
|
291 | return self._nodecache | |
|
303 | 292 | |
|
304 | 293 | def rev(self, node): |
|
305 | if node == nullid: | |
|
306 |
return |
|
|
294 | try: | |
|
295 | return self._nodecache[node] | |
|
296 | except KeyError: | |
|
297 | n = self._nodecache | |
|
298 | if node in n: | |
|
299 | return n[node] | |
|
307 | 300 | i = self.index |
|
308 | for r in xrange(len(i) - 2, -1, -1): | |
|
309 |
if |
|
|
301 | p = self._nodepos | |
|
302 | if p is None: | |
|
303 | p = len(i) - 2 | |
|
304 | for r in xrange(p, -1, -1): | |
|
305 | v = i[r][7] | |
|
306 | n[v] = r | |
|
307 | if v == node: | |
|
308 | self._nodepos = r - 1 | |
|
310 | 309 | return r |
|
311 | 310 | raise LookupError(node, self.indexfile, _('no node')) |
|
311 | ||
|
312 | 312 | def node(self, rev): |
|
313 | 313 | return self.index[rev][7] |
|
314 | 314 | def linkrev(self, rev): |
General Comments 0
You need to be logged in to leave comments.
Login now