20 use crate::{ |
20 use crate::{ |
21 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator}, |
21 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator}, |
22 dirstate::non_normal_entries::{ |
22 dirstate::non_normal_entries::{ |
23 NonNormalEntries, NonNormalEntriesIterator, |
23 NonNormalEntries, NonNormalEntriesIterator, |
24 }, |
24 }, |
|
25 dirstate::owning::OwningDirstateMap, |
25 dirstate::{dirs_multiset::Dirs, make_dirstate_tuple}, |
26 dirstate::{dirs_multiset::Dirs, make_dirstate_tuple}, |
26 parsers::dirstate_parents_to_pytuple, |
27 parsers::dirstate_parents_to_pytuple, |
27 }; |
28 }; |
28 use hg::{ |
29 use hg::{ |
29 dirstate::parsers::Timestamp, |
30 dirstate::parsers::Timestamp, |
56 @staticmethod |
57 @staticmethod |
57 def new(use_dirstate_tree: bool, on_disk: PyBytes) -> PyResult<PyObject> { |
58 def new(use_dirstate_tree: bool, on_disk: PyBytes) -> PyResult<PyObject> { |
58 let dirstate_error = |_: DirstateError| { |
59 let dirstate_error = |_: DirstateError| { |
59 PyErr::new::<exc::OSError, _>(py, "Dirstate error".to_string()) |
60 PyErr::new::<exc::OSError, _>(py, "Dirstate error".to_string()) |
60 }; |
61 }; |
61 let bytes = on_disk.data(py); |
|
62 let (inner, parents) = if use_dirstate_tree { |
62 let (inner, parents) = if use_dirstate_tree { |
63 let mut map = hg::dirstate_tree::dirstate_map::DirstateMap::new(); |
63 let (map, parents) = |
64 let parents = map.read(bytes).map_err(dirstate_error)?; |
64 OwningDirstateMap::new(py, on_disk) |
|
65 .map_err(dirstate_error)?; |
65 (Box::new(map) as _, parents) |
66 (Box::new(map) as _, parents) |
66 } else { |
67 } else { |
|
68 let bytes = on_disk.data(py); |
67 let mut map = RustDirstateMap::default(); |
69 let mut map = RustDirstateMap::default(); |
68 let parents = map.read(bytes).map_err(dirstate_error)?; |
70 let parents = map.read(bytes).map_err(dirstate_error)?; |
69 (Box::new(map) as _, parents) |
71 (Box::new(map) as _, parents) |
70 }; |
72 }; |
71 let map = Self::create_instance(py, inner)?; |
73 let map = Self::create_instance(py, inner)?; |