comparison mercurial/revlog.py @ 36744:33275ab5e837 stable

revlog: do not use delta for lfs revisions This is similar to what we have done for changegroups. It is needed to make sure the delta application code path can assume deltas are always against vanilla (ex. non-LFS) rawtext so the next fix becomes possible. Differential Revision: https://phab.mercurial-scm.org/D2068
author Jun Wu <quark@fb.com>
date Tue, 13 Feb 2018 11:35:32 -0800
parents d031609b3cb7
children 369aadf7a326
comparison
equal deleted inserted replaced
36743:d031609b3cb7 36744:33275ab5e837
405 405
406 deltainfo = None 406 deltainfo = None
407 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): 407 for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta):
408 nominateddeltas = [] 408 nominateddeltas = []
409 for candidaterev in candidaterevs: 409 for candidaterev in candidaterevs:
410 # no delta for rawtext-changing revs (see "candelta" for why)
411 if revlog.flags(candidaterev) & REVIDX_RAWTEXT_CHANGING_FLAGS:
412 continue
410 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh) 413 candidatedelta = self._builddeltainfo(revinfo, candidaterev, fh)
411 if revlog._isgooddeltainfo(candidatedelta, revinfo.textlen): 414 if revlog._isgooddeltainfo(candidatedelta, revinfo.textlen):
412 nominateddeltas.append(candidatedelta) 415 nominateddeltas.append(candidatedelta)
413 if nominateddeltas: 416 if nominateddeltas:
414 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) 417 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen)
2088 2091
2089 if deltacomputer is None: 2092 if deltacomputer is None:
2090 deltacomputer = _deltacomputer(self) 2093 deltacomputer = _deltacomputer(self)
2091 2094
2092 revinfo = _revisioninfo(node, p1, p2, btext, textlen, cachedelta, flags) 2095 revinfo = _revisioninfo(node, p1, p2, btext, textlen, cachedelta, flags)
2093 deltainfo = deltacomputer.finddeltainfo(revinfo, fh) 2096
2097 # no delta for flag processor revision (see "candelta" for why)
2098 # not calling candelta since only one revision needs test, also to
2099 # avoid overhead fetching flags again.
2100 if flags & REVIDX_RAWTEXT_CHANGING_FLAGS:
2101 deltainfo = None
2102 else:
2103 deltainfo = deltacomputer.finddeltainfo(revinfo, fh)
2094 2104
2095 if deltainfo is not None: 2105 if deltainfo is not None:
2096 base = deltainfo.base 2106 base = deltainfo.base
2097 chainbase = deltainfo.chainbase 2107 chainbase = deltainfo.chainbase
2098 data = deltainfo.data 2108 data = deltainfo.data