comparison rust/hg-cpython/src/dirstate/dirstate_map.rs @ 50243:6cce0afc1454 stable

rust-dirstate: remember the data file uuid dirstate was loaded with This will be used in the next patch to fix a race condition.
author Raphaël Gomès <rgomes@octobus.net>
date Mon, 12 Dec 2022 17:08:12 +0100
parents ecd28d89c29e
children dbe09fb038fc
comparison
equal deleted inserted replaced
50242:379a78001d8e 50243:6cce0afc1454
64 @staticmethod 64 @staticmethod
65 def new_v2( 65 def new_v2(
66 on_disk: PyBytes, 66 on_disk: PyBytes,
67 data_size: usize, 67 data_size: usize,
68 tree_metadata: PyBytes, 68 tree_metadata: PyBytes,
69 uuid: PyBytes,
69 ) -> PyResult<PyObject> { 70 ) -> PyResult<PyObject> {
70 let dirstate_error = |e: DirstateError| { 71 let dirstate_error = |e: DirstateError| {
71 PyErr::new::<exc::OSError, _>(py, format!("Dirstate error: {:?}", e)) 72 PyErr::new::<exc::OSError, _>(py, format!("Dirstate error: {:?}", e))
72 }; 73 };
73 let on_disk = PyBytesDeref::new(py, on_disk); 74 let on_disk = PyBytesDeref::new(py, on_disk);
75 let uuid = uuid.data(py);
74 let map = OwningDirstateMap::new_v2( 76 let map = OwningDirstateMap::new_v2(
75 on_disk, data_size, tree_metadata.data(py), 77 on_disk, data_size, tree_metadata.data(py), uuid.to_owned(),
76 ).map_err(dirstate_error)?; 78 ).map_err(dirstate_error)?;
79 let map = Self::create_instance(py, map)?;
80 Ok(map.into_object())
81 }
82
83 /// Returns an empty DirstateMap. Only used for a new dirstate.
84 @staticmethod
85 def new_empty() -> PyResult<PyObject> {
86 let map = OwningDirstateMap::new_empty(vec![]);
77 let map = Self::create_instance(py, map)?; 87 let map = Self::create_instance(py, map)?;
78 Ok(map.into_object()) 88 Ok(map.into_object())
79 } 89 }
80 90
81 def clear(&self) -> PyResult<PyObject> { 91 def clear(&self) -> PyResult<PyObject> {