diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1427,7 +1427,12 @@ class revlog(object): if cachedelta and self._generaldelta and self._lazydeltabase: # Assume what we received from the server is a good choice # build delta will reuse the cache - delta = builddelta(cachedelta[0]) + candidatedelta = builddelta(cachedelta[0]) + if self._isgooddelta(candidatedelta, textlen): + delta = candidatedelta + elif prev != candidatedelta[3]: + # Try against prev to hopefully save us a fulltext. + delta = builddelta(prev) elif self._generaldelta: if p2r != nullrev and self._aggressivemergedeltas: delta = builddelta(p1r)