comparison mercurial/revlog.py @ 39154:e0da43e2f71f

revlog: compute snapshot depth on delta info We need the information to be available when choosing delta.
author Boris Feld <boris.feld@octobus.net>
date Fri, 20 Jul 2018 14:32:56 +0200
parents 3b1042cab4b4
children a43ef77cab1d
comparison
equal deleted inserted replaced
39153:9d6fab487c13 39154:e0da43e2f71f
604 data = attr.ib() 604 data = attr.ib()
605 base = attr.ib() 605 base = attr.ib()
606 chainbase = attr.ib() 606 chainbase = attr.ib()
607 chainlen = attr.ib() 607 chainlen = attr.ib()
608 compresseddeltalen = attr.ib() 608 compresseddeltalen = attr.ib()
609 snapshotdepth = attr.ib()
609 610
610 class _deltacomputer(object): 611 class _deltacomputer(object):
611 def __init__(self, revlog): 612 def __init__(self, revlog):
612 self.revlog = revlog 613 self.revlog = revlog
613 614
734 else: 735 else:
735 deltabase = chainbase 736 deltabase = chainbase
736 chainlen, compresseddeltalen = revlog._chaininfo(base) 737 chainlen, compresseddeltalen = revlog._chaininfo(base)
737 chainlen += 1 738 chainlen += 1
738 compresseddeltalen += deltalen 739 compresseddeltalen += deltalen
740
741 revlog = self.revlog
742 snapshotdepth = None
743 if deltabase == nullrev:
744 snapshotdepth = 0
745 elif revlog._sparserevlog and revlog.issnapshot(deltabase):
746 # A delta chain should always be one full snapshot,
747 # zero or more semi-snapshots, and zero or more deltas
748 p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2)
749 if deltabase not in (p1, p2) and revlog.issnapshot(deltabase):
750 snapshotdepth = len(revlog._deltachain(deltabase)[0])
751
739 return _deltainfo(dist, deltalen, (header, data), deltabase, 752 return _deltainfo(dist, deltalen, (header, data), deltabase,
740 chainbase, chainlen, compresseddeltalen) 753 chainbase, chainlen, compresseddeltalen,
754 snapshotdepth)
741 755
742 def finddeltainfo(self, revinfo, fh): 756 def finddeltainfo(self, revinfo, fh):
743 """Find an acceptable delta against a candidate revision 757 """Find an acceptable delta against a candidate revision
744 758
745 revinfo: information about the revision (instance of _revisioninfo) 759 revinfo: information about the revision (instance of _revisioninfo)