mercurial/utils/storageutil.py
branchstable
changeset 49788 31b4675ca998
parent 49787 bb2c663c840f
child 49790 f463eb675e85
--- a/mercurial/utils/storageutil.py	Mon Nov 28 16:27:23 2022 +0100
+++ b/mercurial/utils/storageutil.py	Thu Nov 24 04:04:19 2022 +0100
@@ -436,10 +436,21 @@
             # No guarantee the receiver has the delta parent, or Storage has a
             # fulltext revision.
             #
-            # Send delta against last revision (if possible), which in the
-            # common case should be similar enough to this revision that the
-            # delta is reasonable.
-            if prevrev is not None:
+            # We compute a delta on the fly to send over the wire.
+            #
+            # We start with a try against p1, which in the common case should
+            # be close to this revision content.
+            #
+            # note: we could optimize between p1 and p2 in merges cases.
+            if is_usable_base(p1rev):
+                baserev = p1rev
+            # if p1 was not an option, try p2
+            elif is_usable_base(p2rev):
+                baserev = p2rev
+            # Send delta against prev in despair
+            #
+            # using the closest available ancestors first might be better?
+            elif prevrev is not None:
                 baserev = prevrev
             else:
                 baserev = nullrev