##// END OF EJS Templates
dirstatemap: move `set_tracked` out of common methods and plug in Rust...
Raphaël Gomès -
r49989:55c158a3 default
parent child Browse files
Show More
@@ -130,30 +130,6 b' class _dirstatemapcommon:'
130 self._refresh_entry(filename, entry)
130 self._refresh_entry(filename, entry)
131 self.copymap.pop(filename, None)
131 self.copymap.pop(filename, None)
132
132
133 def set_tracked(self, filename):
134 new = False
135 entry = self.get(filename)
136 if entry is None:
137 self._dirs_incr(filename)
138 entry = DirstateItem(
139 wc_tracked=True,
140 )
141
142 self._insert_entry(filename, entry)
143 new = True
144 elif not entry.tracked:
145 self._dirs_incr(filename, entry)
146 entry.set_tracked()
147 self._refresh_entry(filename, entry)
148 new = True
149 else:
150 # XXX This is probably overkill for more case, but we need this to
151 # fully replace the `normallookup` call with `set_tracked` one.
152 # Consider smoothing this in the future.
153 entry.set_possibly_dirty()
154 self._refresh_entry(filename, entry)
155 return new
156
157 def set_untracked(self, f):
133 def set_untracked(self, f):
158 """Mark a file as no longer tracked in the dirstate map"""
134 """Mark a file as no longer tracked in the dirstate map"""
159 entry = self.get(f)
135 entry = self.get(f)
@@ -538,6 +514,30 b' class dirstatemap(_dirstatemapcommon):'
538
514
539 ### code related to manipulation of entries and copy-sources
515 ### code related to manipulation of entries and copy-sources
540
516
517 def set_tracked(self, filename):
518 new = False
519 entry = self.get(filename)
520 if entry is None:
521 self._dirs_incr(filename)
522 entry = DirstateItem(
523 wc_tracked=True,
524 )
525
526 self._insert_entry(filename, entry)
527 new = True
528 elif not entry.tracked:
529 self._dirs_incr(filename, entry)
530 entry.set_tracked()
531 self._refresh_entry(filename, entry)
532 new = True
533 else:
534 # XXX This is probably overkill for more case, but we need this to
535 # fully replace the `normallookup` call with `set_tracked` one.
536 # Consider smoothing this in the future.
537 entry.set_possibly_dirty()
538 self._refresh_entry(filename, entry)
539 return new
540
541 def _refresh_entry(self, f, entry):
541 def _refresh_entry(self, f, entry):
542 if not entry.any_tracked:
542 if not entry.any_tracked:
543 self._map.pop(f, None)
543 self._map.pop(f, None)
@@ -722,6 +722,9 b' if rustmod is not None:'
722 def _insert_entry(self, f, entry):
722 def _insert_entry(self, f, entry):
723 self._map.addfile(f, entry)
723 self._map.addfile(f, entry)
724
724
725 def set_tracked(self, f):
726 return self._map.set_tracked(f)
727
725 def _drop_entry(self, f):
728 def _drop_entry(self, f):
726 self._map.drop_item_and_copy_source(f)
729 self._map.drop_item_and_copy_source(f)
727
730
@@ -131,6 +131,16 b' py_class!(pub class DirstateMap |py| {'
131 Ok(PyNone)
131 Ok(PyNone)
132 }
132 }
133
133
134 def set_tracked(&self, f: PyObject) -> PyResult<PyBool> {
135 let bytes = f.extract::<PyBytes>(py)?;
136 let path = HgPath::new(bytes.data(py));
137 let res = self.inner(py).borrow_mut().set_tracked(path);
138 let was_tracked = res.or_else(|_| {
139 Err(PyErr::new::<exc::OSError, _>(py, "Dirstate error".to_string()))
140 })?;
141 Ok(was_tracked.to_py_object(py))
142 }
143
134 def removefile(
144 def removefile(
135 &self,
145 &self,
136 f: PyObject,
146 f: PyObject,
General Comments 0
You need to be logged in to leave comments. Login now