mercurial/revlog.py
changeset 35637 a7d39f08bc66
parent 35636 8108bb51309d
child 35638 edc9330acac1
equal deleted inserted replaced
35636:8108bb51309d 35637:a7d39f08bc66
  1921             # must pass the censored index flag to add censored revisions
  1921             # must pass the censored index flag to add censored revisions
  1922             if not flags & REVIDX_ISCENSORED:
  1922             if not flags & REVIDX_ISCENSORED:
  1923                 raise
  1923                 raise
  1924         return btext[0]
  1924         return btext[0]
  1925 
  1925 
       
  1926     def _builddelta(self, node, rev, p1, p2, btext, cachedelta, fh, flags):
       
  1927         # can we use the cached delta?
       
  1928         if cachedelta and cachedelta[0] == rev:
       
  1929             delta = cachedelta[1]
       
  1930         else:
       
  1931             t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags)
       
  1932             if self.iscensored(rev):
       
  1933                 # deltas based on a censored revision must replace the
       
  1934                 # full content in one patch, so delta works everywhere
       
  1935                 header = mdiff.replacediffheader(self.rawsize(rev), len(t))
       
  1936                 delta = header + t
       
  1937             else:
       
  1938                 ptext = self.revision(rev, _df=fh, raw=True)
       
  1939                 delta = mdiff.textdiff(ptext, t)
       
  1940         header, data = self.compress(delta)
       
  1941         deltalen = len(header) + len(data)
       
  1942         chainbase = self.chainbase(rev)
       
  1943         offset = self.end(len(self) - 1)
       
  1944         dist = deltalen + offset - self.start(chainbase)
       
  1945         if self._generaldelta:
       
  1946             base = rev
       
  1947         else:
       
  1948             base = chainbase
       
  1949         chainlen, compresseddeltalen = self._chaininfo(rev)
       
  1950         chainlen += 1
       
  1951         compresseddeltalen += deltalen
       
  1952         return (dist, deltalen, (header, data), base,
       
  1953                 chainbase, chainlen, compresseddeltalen)
       
  1954 
  1926     def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags,
  1955     def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags,
  1927                      cachedelta, ifh, dfh, alwayscache=False):
  1956                      cachedelta, ifh, dfh, alwayscache=False):
  1928         """internal function to add revisions to the log
  1957         """internal function to add revisions to the log
  1929 
  1958 
  1930         see addrevision for argument descriptions.
  1959         see addrevision for argument descriptions.
  1946             fh = ifh
  1975             fh = ifh
  1947         else:
  1976         else:
  1948             fh = dfh
  1977             fh = dfh
  1949 
  1978 
  1950         btext = [rawtext]
  1979         btext = [rawtext]
  1951 
       
  1952         def builddelta(rev):
       
  1953             # can we use the cached delta?
       
  1954             if cachedelta and cachedelta[0] == rev:
       
  1955                 delta = cachedelta[1]
       
  1956             else:
       
  1957                 t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags)
       
  1958                 if self.iscensored(rev):
       
  1959                     # deltas based on a censored revision must replace the
       
  1960                     # full content in one patch, so delta works everywhere
       
  1961                     header = mdiff.replacediffheader(self.rawsize(rev), len(t))
       
  1962                     delta = header + t
       
  1963                 else:
       
  1964                     ptext = self.revision(rev, _df=fh, raw=True)
       
  1965                     delta = mdiff.textdiff(ptext, t)
       
  1966             header, data = self.compress(delta)
       
  1967             deltalen = len(header) + len(data)
       
  1968             chainbase = self.chainbase(rev)
       
  1969             dist = deltalen + offset - self.start(chainbase)
       
  1970             if self._generaldelta:
       
  1971                 base = rev
       
  1972             else:
       
  1973                 base = chainbase
       
  1974             chainlen, compresseddeltalen = self._chaininfo(rev)
       
  1975             chainlen += 1
       
  1976             compresseddeltalen += deltalen
       
  1977             return (dist, deltalen, (header, data), base,
       
  1978                     chainbase, chainlen, compresseddeltalen)
       
  1979 
  1980 
  1980         curr = len(self)
  1981         curr = len(self)
  1981         prev = curr - 1
  1982         prev = curr - 1
  1982         offset = self.end(prev)
  1983         offset = self.end(prev)
  1983         delta = None
  1984         delta = None
  1992             textlen = len(rawtext)
  1993             textlen = len(rawtext)
  1993 
  1994 
  1994         for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta):
  1995         for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta):
  1995             nominateddeltas = []
  1996             nominateddeltas = []
  1996             for candidaterev in candidaterevs:
  1997             for candidaterev in candidaterevs:
  1997                 candidatedelta = builddelta(candidaterev)
  1998                 candidatedelta = self._builddelta(node, candidaterev, p1, p2,
       
  1999                                                   btext, cachedelta, fh,
       
  2000                                                   flags)
  1998                 if self._isgooddelta(candidatedelta, textlen):
  2001                 if self._isgooddelta(candidatedelta, textlen):
  1999                     nominateddeltas.append(candidatedelta)
  2002                     nominateddeltas.append(candidatedelta)
  2000             if nominateddeltas:
  2003             if nominateddeltas:
  2001                 delta = min(nominateddeltas, key=lambda x: x[1])
  2004                 delta = min(nominateddeltas, key=lambda x: x[1])
  2002                 break
  2005                 break