Show More
@@ -21,6 +21,7 b' use crate::matchers::Matcher;' | |||||
21 | use crate::utils::hg_path::{HgPath, HgPathBuf}; |
|
21 | use crate::utils::hg_path::{HgPath, HgPathBuf}; | |
22 | use crate::DirstateEntry; |
|
22 | use crate::DirstateEntry; | |
23 | use crate::DirstateError; |
|
23 | use crate::DirstateError; | |
|
24 | use crate::DirstateMapError; | |||
24 | use crate::DirstateParents; |
|
25 | use crate::DirstateParents; | |
25 | use crate::DirstateStatus; |
|
26 | use crate::DirstateStatus; | |
26 | use crate::EntryState; |
|
27 | use crate::EntryState; | |
@@ -764,6 +765,32 b" impl<'on_disk> DirstateMap<'on_disk> {" | |||||
764 | Ok(()) |
|
765 | Ok(()) | |
765 | } |
|
766 | } | |
766 |
|
767 | |||
|
768 | fn set_clean( | |||
|
769 | &mut self, | |||
|
770 | filename: &HgPath, | |||
|
771 | old_entry: DirstateEntry, | |||
|
772 | mode: u32, | |||
|
773 | size: u32, | |||
|
774 | mtime: TruncatedTimestamp, | |||
|
775 | ) -> Result<(), DirstateError> { | |||
|
776 | let node = Self::get_or_insert_node( | |||
|
777 | self.on_disk, | |||
|
778 | &mut self.unreachable_bytes, | |||
|
779 | &mut self.root, | |||
|
780 | filename, | |||
|
781 | WithBasename::to_cow_owned, | |||
|
782 | |ancestor| { | |||
|
783 | if !old_entry.tracked() { | |||
|
784 | ancestor.tracked_descendants_count += 1; | |||
|
785 | } | |||
|
786 | }, | |||
|
787 | )?; | |||
|
788 | let mut new_entry = old_entry.clone(); | |||
|
789 | new_entry.set_clean(mode, size, mtime); | |||
|
790 | node.data = NodeData::Entry(new_entry); | |||
|
791 | Ok(()) | |||
|
792 | } | |||
|
793 | ||||
767 | fn iter_nodes<'tree>( |
|
794 | fn iter_nodes<'tree>( | |
768 | &'tree self, |
|
795 | &'tree self, | |
769 | ) -> impl Iterator< |
|
796 | ) -> impl Iterator< | |
@@ -881,6 +908,27 b' impl OwningDirstateMap {' | |||||
881 | self.with_dmap_mut(|map| map.set_tracked(filename, old_entry_opt)) |
|
908 | self.with_dmap_mut(|map| map.set_tracked(filename, old_entry_opt)) | |
882 | } |
|
909 | } | |
883 |
|
910 | |||
|
911 | pub fn set_clean( | |||
|
912 | &mut self, | |||
|
913 | filename: &HgPath, | |||
|
914 | mode: u32, | |||
|
915 | size: u32, | |||
|
916 | mtime: TruncatedTimestamp, | |||
|
917 | ) -> Result<(), DirstateError> { | |||
|
918 | let old_entry = match self.get(filename)? { | |||
|
919 | None => { | |||
|
920 | return Err( | |||
|
921 | DirstateMapError::PathNotFound(filename.into()).into() | |||
|
922 | ) | |||
|
923 | } | |||
|
924 | Some(e) => e, | |||
|
925 | }; | |||
|
926 | self.copy_map_remove(filename)?; | |||
|
927 | self.with_dmap_mut(|map| { | |||
|
928 | map.set_clean(filename, old_entry, mode, size, mtime) | |||
|
929 | }) | |||
|
930 | } | |||
|
931 | ||||
884 | pub fn reset_state( |
|
932 | pub fn reset_state( | |
885 | &mut self, |
|
933 | &mut self, | |
886 | filename: &HgPath, |
|
934 | filename: &HgPath, |
@@ -142,6 +142,28 b' py_class!(pub class DirstateMap |py| {' | |||||
142 | Ok(was_tracked.to_py_object(py)) |
|
142 | Ok(was_tracked.to_py_object(py)) | |
143 | } |
|
143 | } | |
144 |
|
144 | |||
|
145 | def set_clean( | |||
|
146 | &self, | |||
|
147 | f: PyObject, | |||
|
148 | mode: u32, | |||
|
149 | size: u32, | |||
|
150 | mtime: (i64, u32, bool) | |||
|
151 | ) -> PyResult<PyNone> { | |||
|
152 | let (mtime_s, mtime_ns, second_ambiguous) = mtime; | |||
|
153 | let timestamp = TruncatedTimestamp::new_truncate( | |||
|
154 | mtime_s, mtime_ns, second_ambiguous | |||
|
155 | ); | |||
|
156 | let bytes = f.extract::<PyBytes>(py)?; | |||
|
157 | let path = HgPath::new(bytes.data(py)); | |||
|
158 | let res = self.inner(py).borrow_mut().set_clean( | |||
|
159 | path, mode, size, timestamp, | |||
|
160 | ); | |||
|
161 | res.or_else(|_| { | |||
|
162 | Err(PyErr::new::<exc::OSError, _>(py, "Dirstate error".to_string())) | |||
|
163 | })?; | |||
|
164 | Ok(PyNone) | |||
|
165 | } | |||
|
166 | ||||
145 | def reset_state( |
|
167 | def reset_state( | |
146 | &self, |
|
168 | &self, | |
147 | f: PyObject, |
|
169 | f: PyObject, |
General Comments 0
You need to be logged in to leave comments.
Login now