Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.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 | 7867f15b4a38 |
children | 41c03b7592ed |
comparison
equal
deleted
inserted
replaced
23253:8d84b7a2dd91 | 23254:d23834b871ac |
---|---|
2651 numrevs = len(r) | 2651 numrevs = len(r) |
2652 ui.write("# rev p1rev p2rev start end deltastart base p1 p2" | 2652 ui.write("# rev p1rev p2rev start end deltastart base p1 p2" |
2653 " rawsize totalsize compression heads chainlen\n") | 2653 " rawsize totalsize compression heads chainlen\n") |
2654 ts = 0 | 2654 ts = 0 |
2655 heads = set() | 2655 heads = set() |
2656 rindex = r.index | |
2657 | |
2658 def chainbaseandlen(rev): | |
2659 clen = 0 | |
2660 base = rindex[rev][3] | |
2661 while base != rev: | |
2662 clen += 1 | |
2663 rev = base | |
2664 base = rindex[rev][3] | |
2665 return base, clen | |
2666 | 2656 |
2667 for rev in xrange(numrevs): | 2657 for rev in xrange(numrevs): |
2668 dbase = r.deltaparent(rev) | 2658 dbase = r.deltaparent(rev) |
2669 if dbase == -1: | 2659 if dbase == -1: |
2670 dbase = rev | 2660 dbase = rev |
2671 cbase, clen = chainbaseandlen(rev) | 2661 cbase = r.chainbase(rev) |
2662 clen = r.chainlen(rev) | |
2672 p1, p2 = r.parentrevs(rev) | 2663 p1, p2 = r.parentrevs(rev) |
2673 rs = r.rawsize(rev) | 2664 rs = r.rawsize(rev) |
2674 ts = ts + rs | 2665 ts = ts + rs |
2675 heads -= set(r.parentrevs(rev)) | 2666 heads -= set(r.parentrevs(rev)) |
2676 heads.add(rev) | 2667 heads.add(rev) |