mercurial/revlogutils/deltas.py
changeset 39492 a33f394b2bfd
parent 39488 d629b6d2f05a
child 39493 3ca144f1c8dd
--- a/mercurial/revlogutils/deltas.py	Mon Sep 10 09:08:24 2018 -0700
+++ b/mercurial/revlogutils/deltas.py	Fri Sep 07 11:17:29 2018 -0400
@@ -618,8 +618,10 @@
     The group order aims at providing fast or small candidates first.
     """
     gdelta = revlog._generaldelta
+    sparse = revlog._sparserevlog
     curr = len(revlog)
     prev = curr - 1
+    deltachain = lambda rev: revlog._deltachain(rev)[0]
 
     # First we try to reuse a the delta contained in the bundle.
     # (or from the source revlog)
@@ -647,6 +649,14 @@
             # Test all parents (1 or 2), and keep the best candidate
             yield parents
 
+    if sparse and parents:
+        # See if we can use an existing snapshot in the parent chains to use as
+        # a base for a new intermediate-snapshot
+        bases = []
+        for p in parents:
+            bases.append(deltachain(p)[0])
+        yield tuple(sorted(bases))
+
     # other approach failed try against prev to hopefully save us a
     # fulltext.
     yield (prev,)