diff mercurial/pure/parsers.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 72af9fa34832
children
line wrap: on
line diff
--- a/mercurial/pure/parsers.py	Thu Feb 13 13:10:11 2025 +0100
+++ b/mercurial/pure/parsers.py	Thu Feb 13 13:13:05 2025 +0100
@@ -736,7 +736,7 @@
 
 
 class IndexObject(BaseIndexObject):
-    def __init__(self, data: ByteString):
+    def __init__(self, data: ByteString, uses_generaldelta=False):
         assert len(data) % self.entry_size == 0, (
             len(data),
             self.entry_size,
@@ -813,7 +813,7 @@
 
 
 class InlinedIndexObject(BaseIndexObject):
-    def __init__(self, data, inline=0):
+    def __init__(self, data, inline=0, uses_generaldelta=False):
         self._data = data
         self._lgt = self._inline_scan(None)
         self._inline_scan(self._lgt)
@@ -856,7 +856,10 @@
 
 
 def parse_index2(
-    data: ByteString, inline, format=revlog_constants.REVLOGV1
+    data: ByteString,
+    inline,
+    uses_generaldelta,
+    format=revlog_constants.REVLOGV1,
 ) -> tuple[IndexObject | InlinedIndexObject, tuple[int, ByteString] | None]:
     if format == revlog_constants.CHANGELOGV2:
         return parse_index_cl_v2(data)
@@ -865,9 +868,9 @@
             cls = IndexObject2
         else:
             cls = IndexObject
-        return cls(data), None
+        return cls(data, uses_generaldelta), None
     cls = InlinedIndexObject
-    return cls(data, inline), (0, data)
+    return cls(data, inline, uses_generaldelta), (0, data)
 
 
 def parse_index_cl_v2(data):
@@ -986,9 +989,9 @@
         return self.index_format.pack(*data)
 
 
-def parse_index_devel_nodemap(data, inline):
-    """like parse_index2, but alway return a PersistentNodeMapIndexObject"""
-    return PersistentNodeMapIndexObject(data), None
+def parse_index_devel_nodemap(data, inline, uses_generaldelta):
+    """like parse_index2, but always return a PersistentNodeMapIndexObject"""
+    return PersistentNodeMapIndexObject(data, uses_generaldelta), None
 
 
 def parse_dirstate(dmap, copymap, st):