Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-core/src/repo.rs @ 51905:69b804c8e09e
rust: use new revlog configs in all revlog opening code
This centralizes the more complex logic needed for the upcoming code
and creates stronger APIs with fewer booleans.
We also reuse `RevlogType` where needed.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Wed, 19 Jun 2024 12:49:26 +0200 |
parents | 13f58ce70299 |
children | db7dbe6f7bb2 |
line wrap: on
line diff
--- a/rust/hg-core/src/repo.rs Tue Sep 17 10:18:32 2024 +0200 +++ b/rust/hg-core/src/repo.rs Wed Jun 19 12:49:26 2024 +0200 @@ -20,7 +20,8 @@ use crate::utils::SliceExt; use crate::vfs::{is_dir, is_file, Vfs}; use crate::{ - requirements, NodePrefix, RevlogVersionOptions, UncheckedRevision, + requirements, NodePrefix, RevlogDataConfig, RevlogDeltaConfig, + RevlogFeatureConfig, RevlogType, RevlogVersionOptions, UncheckedRevision, }; use crate::{DirstateError, RevlogOpenOptions}; use std::cell::{Ref, RefCell, RefMut}; @@ -529,7 +530,10 @@ } fn new_changelog(&self) -> Result<Changelog, HgError> { - Changelog::open(&self.store_vfs(), self.default_revlog_options(true)?) + Changelog::open( + &self.store_vfs(), + self.default_revlog_options(RevlogType::Changelog)?, + ) } pub fn changelog(&self) -> Result<Ref<Changelog>, HgError> { @@ -543,7 +547,7 @@ fn new_manifestlog(&self) -> Result<Manifestlog, HgError> { Manifestlog::open( &self.store_vfs(), - self.default_revlog_options(false)?, + self.default_revlog_options(RevlogType::Manifestlog)?, ) } @@ -590,9 +594,12 @@ } pub fn filelog(&self, path: &HgPath) -> Result<Filelog, HgError> { - Filelog::open(self, path, self.default_revlog_options(false)?) + Filelog::open( + self, + path, + self.default_revlog_options(RevlogType::Filelog)?, + ) } - /// Write to disk any updates that were made through `dirstate_map_mut`. /// /// The "wlock" must be held while calling this. @@ -742,10 +749,11 @@ pub fn default_revlog_options( &self, - changelog: bool, + revlog_type: RevlogType, ) -> Result<RevlogOpenOptions, HgError> { let requirements = self.requirements(); - let version = if changelog + let is_changelog = revlog_type == RevlogType::Changelog; + let version = if is_changelog && requirements.contains(CHANGELOGV2_REQUIREMENT) { let compute_rank = self @@ -756,7 +764,8 @@ RevlogVersionOptions::V2 } else if requirements.contains(REVLOGV1_REQUIREMENT) { RevlogVersionOptions::V1 { - generaldelta: requirements.contains(GENERALDELTA_REQUIREMENT), + general_delta: requirements.contains(GENERALDELTA_REQUIREMENT), + inline: !is_changelog, } } else { RevlogVersionOptions::V0 @@ -766,6 +775,19 @@ // We don't need to dance around the slow path like in the Python // implementation since we know we have access to the fast code. use_nodemap: requirements.contains(NODEMAP_REQUIREMENT), + delta_config: RevlogDeltaConfig::new( + self.config(), + self.requirements(), + revlog_type, + )?, + data_config: RevlogDataConfig::new( + self.config(), + self.requirements(), + )?, + feature_config: RevlogFeatureConfig::new( + self.config(), + requirements, + )?, }) } }