# HG changeset patch # User Boris Feld # Date 1532686090 -7200 # Node ID f90b333e79cb9a13165a6bd3368e731f247b9f45 # Parent 64ddad2f26bb31c800968920865461b94dc00288 revlog: filter out "invalid" delta base candidates There are bases that we know won't produce a good delta chain. For example, if the base is already bigger than twice the size of the text we store, we know the resulting delta chain will never be valid. We might make the check a bit more powerful and generic in the future, but this looks a good start. In particular, empty file (size 0) will never find a good base, so we should stop spending time trying to find one. diff -r 64ddad2f26bb -r f90b333e79cb mercurial/revlog.py --- a/mercurial/revlog.py Tue Aug 14 13:47:07 2018 -0700 +++ b/mercurial/revlog.py Fri Jul 27 12:08:10 2018 +0200 @@ -750,7 +750,11 @@ deltaparent = self.revlog.deltaparent deltainfo = None + deltas_limit = revinfo.textlen * LIMIT_DELTA2TEXT for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta): + # filter out delta base that will never produce good delta + candidaterevs = [r for r in candidaterevs + if self.revlog.length(r) <= deltas_limit] nominateddeltas = [] for candidaterev in candidaterevs: # skip over empty delta (no need to include them in a chain)