diff rust/hg-core/src/revlog/mod.rs @ 51442:d2858d97af6c

rust-index: drop offset_override The inline `offsets` value diverge from the one on disk for added value, so the offset_override tricks is not going to work well once we start having the full revlog logic in Rust. We remove it beforehand and align the Rust logic to the Python one (adjusting the segment offset at read time for inline revlog).
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 26 Feb 2024 12:59:57 +0100
parents c3f2a9b55f59
children 59f846fbc11d
line wrap: on
line diff
--- a/rust/hg-core/src/revlog/mod.rs	Mon Feb 26 13:41:02 2024 +0100
+++ b/rust/hg-core/src/revlog/mod.rs	Mon Feb 26 12:59:57 2024 +0100
@@ -29,6 +29,7 @@
 use self::node::{NODE_BYTES_LENGTH, NULL_NODE};
 use self::nodemap_docket::NodeMapDocket;
 use super::index::Index;
+use super::index::INDEX_ENTRY_SIZE;
 use super::nodemap::{NodeMap, NodeMapError};
 use crate::errors::HgError;
 use crate::vfs::Vfs;
@@ -531,7 +532,12 @@
             .index
             .get_entry(rev)
             .ok_or(RevlogError::InvalidRevision)?;
-        let start = index_entry.offset();
+        let offset = index_entry.offset();
+        let start = if self.index.is_inline() {
+            offset + ((rev.0 as usize + 1) * INDEX_ENTRY_SIZE)
+        } else {
+            offset
+        };
         let end = start + index_entry.compressed_len() as usize;
         let data = if self.index.is_inline() {
             self.index.data(start, end)