1985 chainlen += 1 |
1986 chainlen += 1 |
1986 compresseddeltalen += deltalen |
1987 compresseddeltalen += deltalen |
1987 return _deltainfo(dist, deltalen, (header, data), deltabase, |
1988 return _deltainfo(dist, deltalen, (header, data), deltabase, |
1988 chainbase, chainlen, compresseddeltalen) |
1989 chainbase, chainlen, compresseddeltalen) |
1989 |
1990 |
|
1991 def _finddeltainfo(self, revinfo, fh): |
|
1992 """Find an acceptable delta against a candidate revision |
|
1993 |
|
1994 revinfo: information about the revision (instance of _revisioninfo) |
|
1995 fh: file handle to either the .i or the .d revlog file, |
|
1996 depending on whether it is inlined or not |
|
1997 |
|
1998 Returns the first acceptable candidate revision, as ordered by |
|
1999 _getcandidaterevs |
|
2000 """ |
|
2001 cachedelta = revinfo.cachedelta |
|
2002 p1 = revinfo.p1 |
|
2003 p2 = revinfo.p2 |
|
2004 |
|
2005 deltainfo = None |
|
2006 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): |
|
2007 nominateddeltas = [] |
|
2008 for candidaterev in candidaterevs: |
|
2009 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh) |
|
2010 if self._isgooddeltainfo(candidatedelta, revinfo.textlen): |
|
2011 nominateddeltas.append(candidatedelta) |
|
2012 if nominateddeltas: |
|
2013 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) |
|
2014 break |
|
2015 |
|
2016 return deltainfo |
|
2017 |
1990 def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags, |
2018 def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags, |
1991 cachedelta, ifh, dfh, alwayscache=False): |
2019 cachedelta, ifh, dfh, alwayscache=False): |
1992 """internal function to add revisions to the log |
2020 """internal function to add revisions to the log |
1993 |
2021 |
1994 see addrevision for argument descriptions. |
2022 see addrevision for argument descriptions. |
2014 btext = [rawtext] |
2042 btext = [rawtext] |
2015 |
2043 |
2016 curr = len(self) |
2044 curr = len(self) |
2017 prev = curr - 1 |
2045 prev = curr - 1 |
2018 offset = self.end(prev) |
2046 offset = self.end(prev) |
2019 deltainfo = None |
|
2020 p1r, p2r = self.rev(p1), self.rev(p2) |
2047 p1r, p2r = self.rev(p1), self.rev(p2) |
2021 |
2048 |
2022 # full versions are inserted when the needed deltas |
2049 # full versions are inserted when the needed deltas |
2023 # become comparable to the uncompressed text |
2050 # become comparable to the uncompressed text |
2024 if rawtext is None: |
2051 if rawtext is None: |
2025 textlen = mdiff.patchedsize(self.rawsize(cachedelta[0]), |
2052 textlen = mdiff.patchedsize(self.rawsize(cachedelta[0]), |
2026 cachedelta[1]) |
2053 cachedelta[1]) |
2027 else: |
2054 else: |
2028 textlen = len(rawtext) |
2055 textlen = len(rawtext) |
2029 |
2056 |
2030 revinfo = _revisioninfo(node, p1, p2, btext, cachedelta, flags) |
2057 revinfo = _revisioninfo(node, p1, p2, btext, textlen, cachedelta, flags) |
2031 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): |
2058 deltainfo = self._finddeltainfo(revinfo, fh) |
2032 nominateddeltas = [] |
|
2033 for candidaterev in candidaterevs: |
|
2034 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh) |
|
2035 if self._isgooddeltainfo(candidatedelta, textlen): |
|
2036 nominateddeltas.append(candidatedelta) |
|
2037 if nominateddeltas: |
|
2038 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) |
|
2039 break |
|
2040 |
2059 |
2041 if deltainfo is not None: |
2060 if deltainfo is not None: |
2042 base = deltainfo.base |
2061 base = deltainfo.base |
2043 chainbase = deltainfo.chainbase |
2062 chainbase = deltainfo.chainbase |
2044 data = deltainfo.data |
2063 data = deltainfo.data |