##// END OF EJS Templates
rust-dirstatemap: add `set_clean` method...
Raphaël Gomès -
r49995:b5c2aca8 default
parent child Browse files
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