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