mercurial/revlog.py
changeset 35737 d99b07bc69fb
parent 35641 c41bb85c09ff
child 35738 f90f6fd130c1
equal deleted inserted replaced
35736:29f57ce416ed 35737:d99b07bc69fb
   277     """
   277     """
   278     node = attr.ib()
   278     node = attr.ib()
   279     p1 = attr.ib()
   279     p1 = attr.ib()
   280     p2 = attr.ib()
   280     p2 = attr.ib()
   281     btext = attr.ib()
   281     btext = attr.ib()
       
   282     textlen = attr.ib()
   282     cachedelta = attr.ib()
   283     cachedelta = attr.ib()
   283     flags = attr.ib()
   284     flags = attr.ib()
   284 
   285 
   285 # index v0:
   286 # index v0:
   286 #  4 bytes: offset
   287 #  4 bytes: offset
  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