diff -r 993d7e2c8b79 -r e4d4361d0bcd mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py Fri Sep 07 11:17:34 2018 -0400 +++ b/mercurial/revlogutils/deltas.py Fri Sep 07 11:17:35 2018 -0400 @@ -647,6 +647,17 @@ good = yield candidates if good is not None: break + + # if we have a refinable value, try to refine it + if good is not None and good not in (p1, p2) and revlog.issnapshot(good): + # refine snapshot down + previous = None + while previous != good: + previous = good + base = revlog.deltaparent(good) + if base == nullrev: + break + good = yield (base,) # we have found nothing yield None