Show More
@@ -932,6 +932,21 b' class deltacomputer(object):' | |||||
932 |
|
932 | |||
933 | def _builddeltainfo(self, revinfo, base, fh): |
|
933 | def _builddeltainfo(self, revinfo, base, fh): | |
934 | # can we use the cached delta? |
|
934 | # can we use the cached delta? | |
|
935 | revlog = self.revlog | |||
|
936 | chainbase = revlog.chainbase(base) | |||
|
937 | if revlog._generaldelta: | |||
|
938 | deltabase = base | |||
|
939 | else: | |||
|
940 | deltabase = chainbase | |||
|
941 | snapshotdepth = None | |||
|
942 | if revlog._sparserevlog and deltabase == nullrev: | |||
|
943 | snapshotdepth = 0 | |||
|
944 | elif revlog._sparserevlog and revlog.issnapshot(deltabase): | |||
|
945 | # A delta chain should always be one full snapshot, | |||
|
946 | # zero or more semi-snapshots, and zero or more deltas | |||
|
947 | p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2) | |||
|
948 | if deltabase not in (p1, p2) and revlog.issnapshot(deltabase): | |||
|
949 | snapshotdepth = len(revlog._deltachain(deltabase)[0]) | |||
935 | delta = None |
|
950 | delta = None | |
936 | if revinfo.cachedelta: |
|
951 | if revinfo.cachedelta: | |
937 | cachebase, cachediff = revinfo.cachedelta |
|
952 | cachebase, cachediff = revinfo.cachedelta | |
@@ -945,31 +960,14 b' class deltacomputer(object):' | |||||
945 | delta = revinfo.cachedelta[1] |
|
960 | delta = revinfo.cachedelta[1] | |
946 | if delta is None: |
|
961 | if delta is None: | |
947 | delta = self._builddeltadiff(base, revinfo, fh) |
|
962 | delta = self._builddeltadiff(base, revinfo, fh) | |
948 | revlog = self.revlog |
|
|||
949 | header, data = revlog.compress(delta) |
|
963 | header, data = revlog.compress(delta) | |
950 | deltalen = len(header) + len(data) |
|
964 | deltalen = len(header) + len(data) | |
951 | chainbase = revlog.chainbase(base) |
|
|||
952 | offset = revlog.end(len(revlog) - 1) |
|
965 | offset = revlog.end(len(revlog) - 1) | |
953 | dist = deltalen + offset - revlog.start(chainbase) |
|
966 | dist = deltalen + offset - revlog.start(chainbase) | |
954 | if revlog._generaldelta: |
|
|||
955 | deltabase = base |
|
|||
956 | else: |
|
|||
957 | deltabase = chainbase |
|
|||
958 | chainlen, compresseddeltalen = revlog._chaininfo(base) |
|
967 | chainlen, compresseddeltalen = revlog._chaininfo(base) | |
959 | chainlen += 1 |
|
968 | chainlen += 1 | |
960 | compresseddeltalen += deltalen |
|
969 | compresseddeltalen += deltalen | |
961 |
|
970 | |||
962 | revlog = self.revlog |
|
|||
963 | snapshotdepth = None |
|
|||
964 | if deltabase == nullrev: |
|
|||
965 | snapshotdepth = 0 |
|
|||
966 | elif revlog._sparserevlog and revlog.issnapshot(deltabase): |
|
|||
967 | # A delta chain should always be one full snapshot, |
|
|||
968 | # zero or more semi-snapshots, and zero or more deltas |
|
|||
969 | p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2) |
|
|||
970 | if deltabase not in (p1, p2) and revlog.issnapshot(deltabase): |
|
|||
971 | snapshotdepth = len(revlog._deltachain(deltabase)[0]) |
|
|||
972 |
|
||||
973 | return _deltainfo(dist, deltalen, (header, data), deltabase, |
|
971 | return _deltainfo(dist, deltalen, (header, data), deltabase, | |
974 | chainbase, chainlen, compresseddeltalen, |
|
972 | chainbase, chainlen, compresseddeltalen, | |
975 | snapshotdepth) |
|
973 | snapshotdepth) |
General Comments 0
You need to be logged in to leave comments.
Login now