Mercurial > hg
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); |