Mercurial > public > mercurial-scm > hg-stable
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] |