diff mercurial/revlog.py @ 52896:8de68446a5bd

index: remember the generaldelta config instead of getting it from the revlog The code (especially the Rust code) was jumping in 4 dimensions to make sense of what was going on because it wrongly assumed that we needed to somehow be able to ask a generaldelta index for a non-generaldelta delta chain, which doesn't make any sense. Removing the cargo-culted/vestigial code, this is cleaner and less confusing.
author Rapha?l Gom?s <rgomes@octobus.net>
date Thu, 13 Feb 2025 13:13:05 +0100
parents 384ecbc8f8ca
children
line wrap: on
line diff
--- a/mercurial/revlog.py	Thu Feb 13 13:10:11 2025 +0100
+++ b/mercurial/revlog.py	Thu Feb 13 13:13:05 2025 +0100
@@ -209,28 +209,34 @@
     node = attr.ib(default=None, type=Optional[bytes])
 
 
-def parse_index_v1(data, inline):
+def parse_index_v1(data, inline, uses_generaldelta):
     # call the C implementation to parse the index data
-    index, cache = parsers.parse_index2(data, inline)
+    index, cache = parsers.parse_index2(data, inline, uses_generaldelta)
     return index, cache
 
 
-def parse_index_v2(data, inline):
+def parse_index_v2(data, inline, uses_generaldelta):
     # call the C implementation to parse the index data
-    index, cache = parsers.parse_index2(data, inline, format=REVLOGV2)
+    index, cache = parsers.parse_index2(
+        data, inline, uses_generaldelta, format=REVLOGV2
+    )
     return index, cache
 
 
-def parse_index_cl_v2(data, inline):
+def parse_index_cl_v2(data, inline, uses_generaldelta):
     # call the C implementation to parse the index data
-    index, cache = parsers.parse_index2(data, inline, format=CHANGELOGV2)
+    index, cache = parsers.parse_index2(
+        data, inline, uses_generaldelta, format=CHANGELOGV2
+    )
     return index, cache
 
 
 if hasattr(parsers, 'parse_index_devel_nodemap'):
 
-    def parse_index_v1_nodemap(data, inline):
-        index, cache = parsers.parse_index_devel_nodemap(data, inline)
+    def parse_index_v1_nodemap(data, inline, uses_generaldelta):
+        index, cache = parsers.parse_index_devel_nodemap(
+            data, inline, uses_generaldelta
+        )
         return index, cache
 
 else:
@@ -519,11 +525,10 @@
         revs in ascending order and ``stopped`` is a bool indicating whether
         ``stoprev`` was hit.
         """
-        generaldelta = self.delta_config.general_delta
         # Try C implementation.
         try:
             return self.index.deltachain(
-                rev, stoprev, generaldelta
+                rev, stoprev
             )  # pytype: disable=attribute-error
         except AttributeError:
             pass
@@ -532,6 +537,7 @@
 
         # Alias to prevent attribute lookup in tight loop.
         index = self.index
+        generaldelta = self.delta_config.general_delta
 
         iterrev = rev
         e = index[iterrev]
@@ -1814,7 +1820,9 @@
             self.uses_rust = True
         else:
             try:
-                d = self._parse_index(index_data, self._inline)
+                d = self._parse_index(
+                    index_data, self._inline, self.delta_config.general_delta
+                )
                 index, chunkcache = d
                 self._register_nodemap_info(index)
             except (ValueError, IndexError):