Show More
@@ -270,6 +270,8 b' class revlog(object):' | |||||
270 | self.nodemap = self._nodecache = nodemap |
|
270 | self.nodemap = self._nodecache = nodemap | |
271 | if not self._chunkcache: |
|
271 | if not self._chunkcache: | |
272 | self._chunkclear() |
|
272 | self._chunkclear() | |
|
273 | # revnum -> (chain-length, sum-delta-length) | |||
|
274 | self._chaininfocache = {} | |||
273 |
|
275 | |||
274 | def tip(self): |
|
276 | def tip(self): | |
275 | return self.node(len(self.index) - 2) |
|
277 | return self.node(len(self.index) - 2) | |
@@ -355,7 +357,11 b' class revlog(object):' | |||||
355 | return base |
|
357 | return base | |
356 | def chainlen(self, rev): |
|
358 | def chainlen(self, rev): | |
357 | return self._chaininfo(rev)[0] |
|
359 | return self._chaininfo(rev)[0] | |
|
360 | ||||
358 | def _chaininfo(self, rev): |
|
361 | def _chaininfo(self, rev): | |
|
362 | chaininfocache = self._chaininfocache | |||
|
363 | if rev in chaininfocache: | |||
|
364 | return chaininfocache[rev] | |||
359 | index = self.index |
|
365 | index = self.index | |
360 | generaldelta = self._generaldelta |
|
366 | generaldelta = self._generaldelta | |
361 | iterrev = rev |
|
367 | iterrev = rev | |
@@ -369,10 +375,20 b' class revlog(object):' | |||||
369 | iterrev = e[3] |
|
375 | iterrev = e[3] | |
370 | else: |
|
376 | else: | |
371 | iterrev -= 1 |
|
377 | iterrev -= 1 | |
|
378 | if iterrev in chaininfocache: | |||
|
379 | t = chaininfocache[iterrev] | |||
|
380 | clen += t[0] | |||
|
381 | compresseddeltalen += t[1] | |||
|
382 | break | |||
372 | e = index[iterrev] |
|
383 | e = index[iterrev] | |
373 | # add text length of base since decompressing that also takes work |
|
384 | else: | |
|
385 | # Add text length of base since decompressing that also takes | |||
|
386 | # work. For cache hits the length is already included. | |||
374 | compresseddeltalen += e[1] |
|
387 | compresseddeltalen += e[1] | |
375 |
r |
|
388 | r = (clen, compresseddeltalen) | |
|
389 | chaininfocache[rev] = r | |||
|
390 | return r | |||
|
391 | ||||
376 | def flags(self, rev): |
|
392 | def flags(self, rev): | |
377 | return self.index[rev][0] & 0xFFFF |
|
393 | return self.index[rev][0] & 0xFFFF | |
378 | def rawsize(self, rev): |
|
394 | def rawsize(self, rev): | |
@@ -1453,6 +1469,7 b' class revlog(object):' | |||||
1453 |
|
1469 | |||
1454 | # then reset internal state in memory to forget those revisions |
|
1470 | # then reset internal state in memory to forget those revisions | |
1455 | self._cache = None |
|
1471 | self._cache = None | |
|
1472 | self._chaininfocache = {} | |||
1456 | self._chunkclear() |
|
1473 | self._chunkclear() | |
1457 | for x in xrange(rev, len(self)): |
|
1474 | for x in xrange(rev, len(self)): | |
1458 | del self.nodemap[self.node(x)] |
|
1475 | del self.nodemap[self.node(x)] |
General Comments 0
You need to be logged in to leave comments.
Login now