1965 |
1965 |
1966 revinfo = _revisioninfo(node, p1, p2, btext, textlen, cachedelta, flags) |
1966 revinfo = _revisioninfo(node, p1, p2, btext, textlen, cachedelta, flags) |
1967 |
1967 |
1968 deltainfo = deltacomputer.finddeltainfo(revinfo, fh) |
1968 deltainfo = deltacomputer.finddeltainfo(revinfo, fh) |
1969 |
1969 |
1970 if deltainfo is not None: |
1970 e = (offset_type(offset, flags), deltainfo.deltalen, textlen, |
1971 base = deltainfo.base |
1971 deltainfo.base, link, p1r, p2r, node) |
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) |
|
1983 self.index.append(e) |
1972 self.index.append(e) |
1984 self.nodemap[node] = curr |
1973 self.nodemap[node] = curr |
1985 |
1974 |
1986 entry = self._io.packentry(e, self.node, self.version, curr) |
1975 entry = self._io.packentry(e, self.node, self.version, curr) |
1987 self._writeentry(transaction, ifh, dfh, entry, data, link, offset) |
1976 self._writeentry(transaction, ifh, dfh, entry, deltainfo.data, |
|
1977 link, offset) |
|
1978 |
|
1979 rawtext = btext[0] |
1988 |
1980 |
1989 if alwayscache and rawtext is None: |
1981 if alwayscache and rawtext is None: |
1990 rawtext = deltacomputer.buildtext(revinfo, fh) |
1982 rawtext = deltacomputer.buildtext(revinfo, fh) |
1991 |
1983 |
1992 if type(rawtext) == bytes: # only accept immutable objects |
1984 if type(rawtext) == bytes: # only accept immutable objects |
1993 self._cache = (node, curr, rawtext) |
1985 self._cache = (node, curr, rawtext) |
1994 self._chainbasecache[curr] = chainbase |
1986 self._chainbasecache[curr] = deltainfo.chainbase |
1995 return node |
1987 return node |
1996 |
1988 |
1997 def _writeentry(self, transaction, ifh, dfh, entry, data, link, offset): |
1989 def _writeentry(self, transaction, ifh, dfh, entry, data, link, offset): |
1998 # Files opened in a+ mode have inconsistent behavior on various |
1990 # Files opened in a+ mode have inconsistent behavior on various |
1999 # platforms. Windows requires that a file positioning call be made |
1991 # platforms. Windows requires that a file positioning call be made |