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