##// END OF EJS Templates
dirstate: Skip no-op conversion in Rust DirstateMap::set_v1...
Simon Sapin -
r48859:32ef6478 default
parent child Browse files
Show More
@@ -664,7 +664,7 b' if rustmod is not None:'
664 664 new = True
665 665 elif not entry.tracked:
666 666 entry.set_tracked()
667 self._rustmap.set_v1(filename, entry)
667 self._rustmap.set_dirstate_item(filename, entry)
668 668 new = True
669 669 else:
670 670 # XXX This is probably overkill for more case, but we need this to
@@ -949,7 +949,7 b' if rustmod is not None:'
949 949 """record that the current state of the file on disk is unknown"""
950 950 entry = self[filename]
951 951 entry.set_possibly_dirty()
952 self._rustmap.set_v1(filename, entry)
952 self._rustmap.set_dirstate_item(filename, entry)
953 953
954 954 def set_clean(self, filename, mode, size, mtime):
955 955 """mark a file as back to a clean state"""
@@ -957,9 +957,9 b' if rustmod is not None:'
957 957 mtime = mtime & rangemask
958 958 size = size & rangemask
959 959 entry.set_clean(mode, size, mtime)
960 self._rustmap.set_v1(filename, entry)
960 self._rustmap.set_dirstate_item(filename, entry)
961 961 self._rustmap.copymap().pop(filename, None)
962 962
963 963 def __setitem__(self, key, value):
964 964 assert isinstance(value, DirstateItem)
965 self._rustmap.set_v1(key, value)
965 self._rustmap.set_dirstate_item(key, value)
@@ -64,7 +64,7 b' impl DirstateMap {'
64 64 self.other_parent_set = None;
65 65 }
66 66
67 pub fn set_v1_inner(&mut self, filename: &HgPath, entry: DirstateEntry) {
67 pub fn set_entry(&mut self, filename: &HgPath, entry: DirstateEntry) {
68 68 self.state_map.insert(filename.to_owned(), entry);
69 69 }
70 70
@@ -758,7 +758,7 b" impl<'on_disk> super::dispatch::Dirstate"
758 758 self.nodes_with_copy_source_count = 0;
759 759 }
760 760
761 fn set_v1(&mut self, filename: &HgPath, entry: DirstateEntry) {
761 fn set_entry(&mut self, filename: &HgPath, entry: DirstateEntry) {
762 762 let node =
763 763 self.get_or_insert(&filename).expect("no parse error in v1");
764 764 node.data = NodeData::Entry(entry);
@@ -37,7 +37,9 b' pub trait DirstateMapMethods {'
37 37 /// Remove information about all files in this map
38 38 fn clear(&mut self);
39 39
40 fn set_v1(&mut self, filename: &HgPath, entry: DirstateEntry);
40 /// Add the given filename to the map if it is not already there, and
41 /// associate the given entry with it.
42 fn set_entry(&mut self, filename: &HgPath, entry: DirstateEntry);
41 43
42 44 /// Add or change the information associated to a given file.
43 45 ///
@@ -319,8 +321,8 b' impl DirstateMapMethods for DirstateMap '
319 321 ///
320 322 /// XXX Is temporary during a refactor of V1 dirstate and will disappear
321 323 /// shortly.
322 fn set_v1(&mut self, filename: &HgPath, entry: DirstateEntry) {
323 self.set_v1_inner(&filename, entry)
324 fn set_entry(&mut self, filename: &HgPath, entry: DirstateEntry) {
325 self.set_entry(&filename, entry)
324 326 }
325 327
326 328 fn add_file(
@@ -20,8 +20,8 b' impl DirstateMapMethods for OwningDirsta'
20 20 self.get_mut().clear()
21 21 }
22 22
23 fn set_v1(&mut self, filename: &HgPath, entry: DirstateEntry) {
24 self.get_mut().set_v1(filename, entry)
23 fn set_entry(&mut self, filename: &HgPath, entry: DirstateEntry) {
24 self.get_mut().set_entry(filename, entry)
25 25 }
26 26
27 27 fn add_file(
@@ -129,18 +129,14 b' py_class!(pub class DirstateMap |py| {'
129 129 }
130 130 }
131 131
132 def set_v1(&self, path: PyObject, item: PyObject) -> PyResult<PyObject> {
132 def set_dirstate_item(
133 &self,
134 path: PyObject,
135 item: DirstateItem
136 ) -> PyResult<PyObject> {
133 137 let f = path.extract::<PyBytes>(py)?;
134 138 let filename = HgPath::new(f.data(py));
135 let state = item.getattr(py, "state")?.extract::<PyBytes>(py)?;
136 let state = state.data(py)[0];
137 let entry = DirstateEntry::from_v1_data(
138 state.try_into().expect("state is always valid"),
139 item.getattr(py, "mode")?.extract(py)?,
140 item.getattr(py, "size")?.extract(py)?,
141 item.getattr(py, "mtime")?.extract(py)?,
142 );
143 self.inner(py).borrow_mut().set_v1(filename, entry);
139 self.inner(py).borrow_mut().set_entry(filename, item.get_entry(py));
144 140 Ok(py.None())
145 141 }
146 142
@@ -180,6 +180,10 b' impl DirstateItem {'
180 180 Ok(DirstateItem::create_instance(py, Cell::new(entry))?.into_object())
181 181 }
182 182
183 pub fn get_entry(&self, py: Python<'_>) -> DirstateEntry {
184 self.entry(py).get()
185 }
186
183 187 // TODO: Use https://doc.rust-lang.org/std/cell/struct.Cell.html#method.update instead when it’s stable
184 188 pub fn update(&self, py: Python<'_>, f: impl FnOnce(&mut DirstateEntry)) {
185 189 let mut entry = self.entry(py).get();
General Comments 0
You need to be logged in to leave comments. Login now