comparison rust/hg-cpython/src/dirstate/dirstate_map.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 10b9f11daf15
children ecd28d89c29e
comparison
equal deleted inserted replaced
50220:35ea3c139104 50221:1891086f6c7f
21 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator}, 21 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator},
22 dirstate::item::DirstateItem, 22 dirstate::item::DirstateItem,
23 pybytes_deref::PyBytesDeref, 23 pybytes_deref::PyBytesDeref,
24 }; 24 };
25 use hg::{ 25 use hg::{
26 dirstate::StateMapIter, dirstate_tree::on_disk::DirstateV2ParseError, 26 dirstate::StateMapIter, dirstate_tree::dirstate_map::DirstateMapWriteMode,
27 dirstate_tree::on_disk::DirstateV2ParseError,
27 dirstate_tree::owning::OwningDirstateMap, revlog::Node, 28 dirstate_tree::owning::OwningDirstateMap, revlog::Node,
28 utils::files::normalize_case, utils::hg_path::HgPath, DirstateEntry, 29 utils::files::normalize_case, utils::hg_path::HgPath, DirstateEntry,
29 DirstateError, DirstateParents, 30 DirstateError, DirstateParents,
30 }; 31 };
31 32
245 /// Returns new data together with whether that data should be appended to 246 /// Returns new data together with whether that data should be appended to
246 /// the existing data file whose content is at `self.on_disk` (True), 247 /// the existing data file whose content is at `self.on_disk` (True),
247 /// instead of written to a new data file (False). 248 /// instead of written to a new data file (False).
248 def write_v2( 249 def write_v2(
249 &self, 250 &self,
250 can_append: bool, 251 write_mode: usize,
251 ) -> PyResult<PyObject> { 252 ) -> PyResult<PyObject> {
252 let inner = self.inner(py).borrow(); 253 let inner = self.inner(py).borrow();
253 let result = inner.pack_v2(can_append); 254 let rust_write_mode = match write_mode {
255 0 => DirstateMapWriteMode::Auto,
256 1 => DirstateMapWriteMode::ForceNewDataFile,
257 _ => DirstateMapWriteMode::Auto, // XXX should we error out?
258 };
259 let result = inner.pack_v2(rust_write_mode);
254 match result { 260 match result {
255 Ok((packed, tree_metadata, append, _old_data_size)) => { 261 Ok((packed, tree_metadata, append, _old_data_size)) => {
256 let packed = PyBytes::new(py, &packed); 262 let packed = PyBytes::new(py, &packed);
257 let tree_metadata = PyBytes::new(py, tree_metadata.as_bytes()); 263 let tree_metadata = PyBytes::new(py, tree_metadata.as_bytes());
258 let tuple = (packed, tree_metadata, append); 264 let tuple = (packed, tree_metadata, append);