comparison mercurial/revlog.py @ 23254:d23834b871ac

debugrevlog: fix computing chain length in debugrevlog -d The chain length was computed correctly only when generaldelta feature was enabled. Now it's fixed. When generaldelta is disabled the base revision in revlog index is not the revision we have delta against - it's always previous revision. Instead of incorrect chainbaseandlen in command.py we are now using two single-responsibility functions in revlog.py: - chainbase(rev) - chainlen(rev) Only chainlen(rev) was missing so it was written to mimic the way the chain of deltas is actually found during file reconstruction.
author Mateusz Kwapich <mitrandir@fb.com>
date Thu, 06 Nov 2014 14:08:25 -0800
parents 8a096d4d0862
children 76effa770ff9
comparison
equal deleted inserted replaced
23253:8d84b7a2dd91 23254:d23834b871ac
348 base = index[rev][3] 348 base = index[rev][3]
349 while base != rev: 349 while base != rev:
350 rev = base 350 rev = base
351 base = index[rev][3] 351 base = index[rev][3]
352 return base 352 return base
353 def chainlen(self, rev):
354 index = self.index
355 generaldelta = self._generaldelta
356 iterrev = rev
357 e = index[iterrev]
358 clen = 0
359 while iterrev != e[3]:
360 clen += 1
361 if generaldelta:
362 iterrev = e[3]
363 else:
364 iterrev -= 1
365 e = index[iterrev]
366 return clen
353 def flags(self, rev): 367 def flags(self, rev):
354 return self.index[rev][0] & 0xFFFF 368 return self.index[rev][0] & 0xFFFF
355 def rawsize(self, rev): 369 def rawsize(self, rev):
356 """return the length of the uncompressed text for a given revision""" 370 """return the length of the uncompressed text for a given revision"""
357 l = self.index[rev][2] 371 l = self.index[rev][2]