Show More
@@ -1967,31 +1967,23 b' class revlog(object):' | |||
|
1967 | 1967 | |
|
1968 | 1968 | deltainfo = deltacomputer.finddeltainfo(revinfo, fh) |
|
1969 | 1969 | |
|
1970 | if deltainfo is not None: | |
|
1971 |
|
|
|
1972 | chainbase = deltainfo.chainbase | |
|
1973 | data = deltainfo.data | |
|
1974 | l = deltainfo.deltalen | |
|
1975 | else: | |
|
1976 | rawtext = deltacomputer.buildtext(revinfo, fh) | |
|
1977 | data = self.compress(rawtext) | |
|
1978 | l = len(data[1]) + len(data[0]) | |
|
1979 | base = chainbase = curr | |
|
1980 | ||
|
1981 | e = (offset_type(offset, flags), l, textlen, | |
|
1982 | base, link, p1r, p2r, node) | |
|
1970 | e = (offset_type(offset, flags), deltainfo.deltalen, textlen, | |
|
1971 | deltainfo.base, link, p1r, p2r, node) | |
|
1983 | 1972 | self.index.append(e) |
|
1984 | 1973 | self.nodemap[node] = curr |
|
1985 | 1974 | |
|
1986 | 1975 | entry = self._io.packentry(e, self.node, self.version, curr) |
|
1987 |
self._writeentry(transaction, ifh, dfh, entry, data, |
|
|
1976 | self._writeentry(transaction, ifh, dfh, entry, deltainfo.data, | |
|
1977 | link, offset) | |
|
1978 | ||
|
1979 | rawtext = btext[0] | |
|
1988 | 1980 | |
|
1989 | 1981 | if alwayscache and rawtext is None: |
|
1990 | 1982 | rawtext = deltacomputer.buildtext(revinfo, fh) |
|
1991 | 1983 | |
|
1992 | 1984 | if type(rawtext) == bytes: # only accept immutable objects |
|
1993 | 1985 | self._cache = (node, curr, rawtext) |
|
1994 | self._chainbasecache[curr] = chainbase | |
|
1986 | self._chainbasecache[curr] = deltainfo.chainbase | |
|
1995 | 1987 | return node |
|
1996 | 1988 | |
|
1997 | 1989 | def _writeentry(self, transaction, ifh, dfh, entry, data, link, offset): |
@@ -690,6 +690,19 b' class deltacomputer(object):' | |||
|
690 | 690 | chainbase, chainlen, compresseddeltalen, |
|
691 | 691 | snapshotdepth) |
|
692 | 692 | |
|
693 | def _fullsnapshotinfo(self, fh, revinfo): | |
|
694 | curr = len(self.revlog) | |
|
695 | rawtext = self.buildtext(revinfo, fh) | |
|
696 | data = self.revlog.compress(rawtext) | |
|
697 | compresseddeltalen = deltalen = dist = len(data[1]) + len(data[0]) | |
|
698 | deltabase = chainbase = curr | |
|
699 | snapshotdepth = 0 | |
|
700 | chainlen = 1 | |
|
701 | ||
|
702 | return _deltainfo(dist, deltalen, data, deltabase, | |
|
703 | chainbase, chainlen, compresseddeltalen, | |
|
704 | snapshotdepth) | |
|
705 | ||
|
693 | 706 | def finddeltainfo(self, revinfo, fh): |
|
694 | 707 | """Find an acceptable delta against a candidate revision |
|
695 | 708 | |
@@ -699,15 +712,18 b' class deltacomputer(object):' | |||
|
699 | 712 | |
|
700 | 713 | Returns the first acceptable candidate revision, as ordered by |
|
701 | 714 | _getcandidaterevs |
|
715 | ||
|
716 | If no suitable deltabase is found, we return delta info for a full | |
|
717 | snapshot. | |
|
702 | 718 | """ |
|
703 | 719 | if not revinfo.textlen: |
|
704 | return None # empty file do not need delta | |
|
720 | return self._fullsnapshotinfo(fh, revinfo) | |
|
705 | 721 | |
|
706 | 722 | # no delta for flag processor revision (see "candelta" for why) |
|
707 | 723 | # not calling candelta since only one revision needs test, also to |
|
708 | 724 | # avoid overhead fetching flags again. |
|
709 | 725 | if revinfo.flags & REVIDX_RAWTEXT_CHANGING_FLAGS: |
|
710 | return None | |
|
726 | return self._fullsnapshotinfo(fh, revinfo) | |
|
711 | 727 | |
|
712 | 728 | cachedelta = revinfo.cachedelta |
|
713 | 729 | p1 = revinfo.p1 |
@@ -742,4 +758,6 b' class deltacomputer(object):' | |||
|
742 | 758 | deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) |
|
743 | 759 | break |
|
744 | 760 | |
|
761 | if deltainfo is None: | |
|
762 | deltainfo = self._fullsnapshotinfo(fh, revinfo) | |
|
745 | 763 | return deltainfo |
General Comments 0
You need to be logged in to leave comments.
Login now