comparison rust/hg-core/src/repo.rs @ 50221:1891086f6c7f stable

dirstate: use more than a bool to control append behavior When writing dirstate-v2, we might either append to the existing file, or create a new file. We are about to introduce some configuration to control this behavior. As a prelude, we change the current way the behavior was automatically controlled to make the change smaller/clearer.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 24 Feb 2023 18:21:54 +0100
parents f5e4248e5bce
children ecd28d89c29e
comparison
equal deleted inserted replaced
50220:35ea3c139104 50221:1891086f6c7f
1 use crate::changelog::Changelog; 1 use crate::changelog::Changelog;
2 use crate::config::{Config, ConfigError, ConfigParseError}; 2 use crate::config::{Config, ConfigError, ConfigParseError};
3 use crate::dirstate::DirstateParents; 3 use crate::dirstate::DirstateParents;
4 use crate::dirstate_tree::dirstate_map::DirstateMapWriteMode;
4 use crate::dirstate_tree::on_disk::Docket as DirstateDocket; 5 use crate::dirstate_tree::on_disk::Docket as DirstateDocket;
5 use crate::dirstate_tree::owning::OwningDirstateMap; 6 use crate::dirstate_tree::owning::OwningDirstateMap;
6 use crate::errors::HgResultExt; 7 use crate::errors::HgResultExt;
7 use crate::errors::{HgError, IoResultExt}; 8 use crate::errors::{HgError, IoResultExt};
8 use crate::lock::{try_with_lock_no_wait, LockError}; 9 use crate::lock::{try_with_lock_no_wait, LockError};
434 let (packed_dirstate, old_uuid_to_remove) = if self.has_dirstate_v2() { 435 let (packed_dirstate, old_uuid_to_remove) = if self.has_dirstate_v2() {
435 let uuid_opt = self 436 let uuid_opt = self
436 .dirstate_data_file_uuid 437 .dirstate_data_file_uuid
437 .get_or_init(|| self.read_dirstate_data_file_uuid())?; 438 .get_or_init(|| self.read_dirstate_data_file_uuid())?;
438 let uuid_opt = uuid_opt.as_ref(); 439 let uuid_opt = uuid_opt.as_ref();
439 let can_append = uuid_opt.is_some(); 440 let write_mode = if uuid_opt.is_some() {
441 DirstateMapWriteMode::Auto
442 } else {
443 DirstateMapWriteMode::ForceNewDataFile
444 };
440 let (data, tree_metadata, append, old_data_size) = 445 let (data, tree_metadata, append, old_data_size) =
441 map.pack_v2(can_append)?; 446 map.pack_v2(write_mode)?;
442 447
443 // Reuse the uuid, or generate a new one, keeping the old for 448 // Reuse the uuid, or generate a new one, keeping the old for
444 // deletion. 449 // deletion.
445 let (uuid, old_uuid) = match uuid_opt { 450 let (uuid, old_uuid) = match uuid_opt {
446 Some(uuid) => { 451 Some(uuid) => {