changeset 52049:a8cf6a852f11

rust-dirstate: pass dirstate tracked key from the requirements We will make use of this with the `hg update` fastpath
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 02 Oct 2024 18:31:32 +0200
parents 78fc666a3e94
children de317a87ea6a
files rust/hg-core/src/dirstate_tree/dirstate_map.rs rust/hg-core/src/dirstate_tree/on_disk.rs rust/hg-core/src/repo.rs
diffstat 3 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs	Wed Oct 02 13:39:43 2024 +0200
+++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs	Wed Oct 02 18:31:32 2024 +0200
@@ -88,6 +88,9 @@
 
     /// Controlled by config option `devel.dirstate.v2.data_update_mode`
     pub(super) write_mode: DirstateMapWriteMode,
+
+    /// Controlled by config option `format.use-dirstate-tracked-hint`
+    pub(super) use_tracked_hint: bool,
 }
 
 /// Using a plain `HgPathBuf` of the full path from the repository root as a
@@ -471,6 +474,7 @@
             identity: None,
             dirstate_version: DirstateVersion::V1,
             write_mode: DirstateMapWriteMode::Auto,
+            use_tracked_hint: false,
         }
     }
 
@@ -960,6 +964,10 @@
     pub(crate) fn set_write_mode(&mut self, write_mode: DirstateMapWriteMode) {
         self.write_mode = write_mode;
     }
+
+    pub(crate) fn set_tracked_hint(&mut self, tracked_hint: bool) {
+        self.use_tracked_hint = tracked_hint;
+    }
 }
 
 /// Sets the parameters for resetting a dirstate entry
--- a/rust/hg-core/src/dirstate_tree/on_disk.rs	Wed Oct 02 13:39:43 2024 +0200
+++ b/rust/hg-core/src/dirstate_tree/on_disk.rs	Wed Oct 02 18:31:32 2024 +0200
@@ -317,6 +317,7 @@
         identity,
         dirstate_version: DirstateVersion::V2,
         write_mode: DirstateMapWriteMode::Auto,
+        use_tracked_hint: false,
     };
     Ok(dirstate_map)
 }
--- a/rust/hg-core/src/repo.rs	Wed Oct 02 13:39:43 2024 +0200
+++ b/rust/hg-core/src/repo.rs	Wed Oct 02 18:31:32 2024 +0200
@@ -9,8 +9,9 @@
 use crate::lock::{try_with_lock_no_wait, LockError};
 use crate::manifest::{Manifest, Manifestlog};
 use crate::requirements::{
-    CHANGELOGV2_REQUIREMENT, GENERALDELTA_REQUIREMENT, NODEMAP_REQUIREMENT,
-    REVLOGV1_REQUIREMENT, REVLOGV2_REQUIREMENT,
+    CHANGELOGV2_REQUIREMENT, DIRSTATE_TRACKED_HINT_V1,
+    GENERALDELTA_REQUIREMENT, NODEMAP_REQUIREMENT, REVLOGV1_REQUIREMENT,
+    REVLOGV2_REQUIREMENT,
 };
 use crate::revlog::filelog::Filelog;
 use crate::revlog::RevlogError;
@@ -547,7 +548,13 @@
             _ => DirstateMapWriteMode::Auto,
         };
 
-        map.with_dmap_mut(|m| m.set_write_mode(write_mode));
+        let tracked_hint =
+            self.requirements().contains(DIRSTATE_TRACKED_HINT_V1);
+
+        map.with_dmap_mut(|m| {
+            m.set_write_mode(write_mode);
+            m.set_tracked_hint(tracked_hint);
+        });
 
         Ok(map)
     }