diff -r 3e2c02836420 -r 38e88450138c mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py Sun Dec 23 12:39:20 2018 +0900 +++ b/mercurial/revlogutils/deltas.py Thu Dec 20 10:15:20 2018 +0100 @@ -30,6 +30,7 @@ from .. import ( error, mdiff, + util, ) # maximum / ratio @@ -688,11 +689,14 @@ def _findsnapshots(revlog, cache, start_rev): """find snapshot from start_rev to tip""" - deltaparent = revlog.deltaparent - issnapshot = revlog.issnapshot - for rev in revlog.revs(start_rev): - if issnapshot(rev): - cache[deltaparent(rev)].append(rev) + if util.safehasattr(revlog.index, 'findsnapshots'): + revlog.index.findsnapshots(cache, start_rev) + else: + deltaparent = revlog.deltaparent + issnapshot = revlog.issnapshot + for rev in revlog.revs(start_rev): + if issnapshot(rev): + cache[deltaparent(rev)].append(rev) def _refinedgroups(revlog, p1, p2, cachedelta): good = None