mercurial/revlog.py
changeset 39121 152ae0f84f9a
parent 39120 8f83a953dddf
child 39122 dbb3e9e44fce
--- a/mercurial/revlog.py	Fri Jul 27 19:09:41 2018 +0200
+++ b/mercurial/revlog.py	Tue Aug 14 13:44:13 2018 -0700
@@ -2473,9 +2473,30 @@
             # certain size. Be also apply this tradeoff here and relax span
             # constraint for small enought content.
             maxdist = self._srmingapsize
-        if (distance > maxdist or deltainfo.deltalen > textlen or
-            deltainfo.compresseddeltalen > textlen * 2 or
-            (self._maxchainlen and deltainfo.chainlen > self._maxchainlen)):
+
+        # Bad delta from read span:
+        #
+        #   If the span of data read is larger than the maximum allowed.
+        if maxdist < distance:
+            return False
+
+        # Bad delta from new delta size:
+        #
+        #   If the delta size is larger than the target text, storing the
+        #   delta will be inefficient.
+        if textlen < deltainfo.deltalen:
+            return False
+
+        # Bad delta from cumulated payload size:
+        #
+        #   If the sum of delta get larger than K * target text length.
+        if textlen * 2  < deltainfo.compresseddeltalen:
+            return False
+
+        # Bad delta from chain length:
+        #
+        #   If the number of delta in the chain gets too high.
+        if self._maxchainlen and  self._maxchainlen < deltainfo.chainlen:
             return False
 
         return True