changeset 51358:383e99f6bc99

delta-find: move sparse-revlog delta checks in the associated class Lets move the specialized code in the specialized class.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 07 Jan 2024 05:16:08 +0100
parents d7e2acdd50ba
children a224ce5694b3
files mercurial/revlogutils/deltas.py
diffstat 1 files changed, 42 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py	Sun Jan 07 04:39:18 2024 +0100
+++ b/mercurial/revlogutils/deltas.py	Sun Jan 07 05:16:08 2024 +0100
@@ -662,8 +662,6 @@
             return False
         if not self._is_good_delta_info_chain_quality(deltainfo):
             return False
-        if not self._is_good_delta_info_snapshot_constraints(deltainfo):
-            return False
         return True
 
     def _is_good_delta_info_universal(self, deltainfo):
@@ -746,34 +744,6 @@
             return False
         return True
 
-    def _is_good_delta_info_snapshot_constraints(self, deltainfo):
-        """Returns True if the chain associated with snapshots
-
-        This performs checks for format that use sparse-revlog and intermediate
-        snapshots.
-
-        This is used by is_good_delta_info.
-        """
-        # if not a snapshot, this method has no filtering to do
-        if deltainfo.snapshotdepth is None:
-            return True
-        # bad delta from intermediate snapshot size limit
-        #
-        #   If an intermediate snapshot size is higher than the limit.  The
-        #   limit exist to prevent endless chain of intermediate delta to be
-        #   created.
-        if (
-            self.revinfo.textlen >> deltainfo.snapshotdepth
-        ) < deltainfo.deltalen:
-            return False
-
-        # bad delta if new intermediate snapshot is larger than the previous
-        # snapshot
-        if self.revlog.length(deltainfo.base) < deltainfo.deltalen:
-            return False
-
-        return True
-
     @property
     def done(self):
         """True when all possible candidate have been tested"""
@@ -1092,6 +1062,48 @@
 class _SparseDeltaSearch(_GeneralDeltaSearch):
     """Delta search variants for sparse-revlog"""
 
+    def is_good_delta_info(self, deltainfo):
+        """Returns True if the given delta is good.
+
+        Good means that it is within the disk span, disk size, and chain length
+        bounds that we know to be performant.
+        """
+        if not self._is_good_delta_info_universal(deltainfo):
+            return False
+        if not self._is_good_delta_info_chain_quality(deltainfo):
+            return False
+        if not self._is_good_delta_info_snapshot_constraints(deltainfo):
+            return False
+        return True
+
+    def _is_good_delta_info_snapshot_constraints(self, deltainfo):
+        """Returns True if the chain associated with snapshots
+
+        This performs checks for format that use sparse-revlog and intermediate
+        snapshots.
+
+        This is used by is_good_delta_info.
+        """
+        # if not a snapshot, this method has no filtering to do
+        if deltainfo.snapshotdepth is None:
+            return True
+        # bad delta from intermediate snapshot size limit
+        #
+        #   If an intermediate snapshot size is higher than the limit.  The
+        #   limit exist to prevent endless chain of intermediate delta to be
+        #   created.
+        if (
+            self.revinfo.textlen >> deltainfo.snapshotdepth
+        ) < deltainfo.deltalen:
+            return False
+
+        # bad delta if new intermediate snapshot is larger than the previous
+        # snapshot
+        if self.revlog.length(deltainfo.base) < deltainfo.deltalen:
+            return False
+
+        return True
+
     def _iter_snapshots_base(self):
         assert self.revlog.delta_config.sparse_revlog
         assert self.current_stage == _STAGE_SNAPSHOT