# HG changeset patch # User Simon Sapin # Date 1632404203 -7200 # Node ID 2ac0e6b2322237ae2cd7eba593a8f572502dd876 # Parent 29aa633815db279dcff737878bc292e21f448aa2 dirstate: Replace dropfile with drop_item_and_copy_source Those removing a DirstateItem and a copy source are always done together Differential Revision: https://phab.mercurial-scm.org/D11493 diff -r 29aa633815db -r 2ac0e6b23222 mercurial/dirstatemap.py --- a/mercurial/dirstatemap.py Thu Sep 23 15:29:38 2021 +0200 +++ b/mercurial/dirstatemap.py Thu Sep 23 15:36:43 2021 +0200 @@ -606,7 +606,7 @@ self.copymap.pop(filename, None) if not (p1_tracked or p2_tracked or wc_tracked): - self.dropfile(filename) + self._rustmap.drop_item_and_copy_source(filename) elif merged: # XXX might be merged and removed ? entry = self.get(filename) @@ -684,8 +684,7 @@ return False else: if entry.added: - self._rustmap.copymap().pop(f, None) - self._rustmap.dropfile(f) + self._rustmap.drop_item_and_copy_source(f) else: self._rustmap.removefile(f, in_merge=True) return True @@ -693,10 +692,6 @@ def removefile(self, *args, **kwargs): return self._rustmap.removefile(*args, **kwargs) - def dropfile(self, f, *args, **kwargs): - self._rustmap.copymap().pop(f, None) - self._rustmap.dropfile(f, *args, **kwargs) - def clearambiguoustimes(self, *args, **kwargs): return self._rustmap.clearambiguoustimes(*args, **kwargs) diff -r 29aa633815db -r 2ac0e6b23222 rust/hg-core/src/dirstate/dirstate_map.rs --- a/rust/hg-core/src/dirstate/dirstate_map.rs Thu Sep 23 15:29:38 2021 +0200 +++ b/rust/hg-core/src/dirstate/dirstate_map.rs Thu Sep 23 15:36:43 2021 +0200 @@ -195,7 +195,7 @@ /// Remove a file from the dirstate. /// Returns `true` if the file was previously recorded. - pub fn drop_file( + pub fn drop_entry_and_copy_source( &mut self, filename: &HgPath, ) -> Result<(), DirstateError> { @@ -216,6 +216,8 @@ .0 .remove(filename); + self.copy_map.remove(filename); + Ok(()) } diff -r 29aa633815db -r 2ac0e6b23222 rust/hg-core/src/dirstate_tree/dirstate_map.rs --- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs Thu Sep 23 15:29:38 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs Thu Sep 23 15:36:43 2021 +0200 @@ -845,7 +845,10 @@ Ok(self.add_or_remove_file(filename, old_state, entry)?) } - fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError> { + fn drop_entry_and_copy_source( + &mut self, + filename: &HgPath, + ) -> Result<(), DirstateError> { let was_tracked = self .get(filename)? .map_or(false, |e| e.state().is_tracked()); @@ -907,7 +910,8 @@ node.data = NodeData::None } if let Some(source) = &node.copy_source { - DirstateMap::count_dropped_path(unreachable_bytes, source) + DirstateMap::count_dropped_path(unreachable_bytes, source); + node.copy_source = None } dropped = Dropped { was_tracked: node diff -r 29aa633815db -r 2ac0e6b23222 rust/hg-core/src/dirstate_tree/dispatch.rs --- a/rust/hg-core/src/dirstate_tree/dispatch.rs Thu Sep 23 15:29:38 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/dispatch.rs Thu Sep 23 15:36:43 2021 +0200 @@ -66,7 +66,10 @@ /// Drop information about this file from the map if any. /// /// `get` will now return `None` for this filename. - fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError>; + fn drop_entry_and_copy_source( + &mut self, + filename: &HgPath, + ) -> Result<(), DirstateError>; /// Among given files, mark the stored `mtime` as ambiguous if there is one /// (if `state == EntryState::Normal`) equal to the given current Unix @@ -339,8 +342,11 @@ self.remove_file(filename, in_merge) } - fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError> { - self.drop_file(filename) + fn drop_entry_and_copy_source( + &mut self, + filename: &HgPath, + ) -> Result<(), DirstateError> { + self.drop_entry_and_copy_source(filename) } fn clear_ambiguous_times( diff -r 29aa633815db -r 2ac0e6b23222 rust/hg-core/src/dirstate_tree/owning_dispatch.rs --- a/rust/hg-core/src/dirstate_tree/owning_dispatch.rs Thu Sep 23 15:29:38 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/owning_dispatch.rs Thu Sep 23 15:36:43 2021 +0200 @@ -55,8 +55,11 @@ self.get_mut().remove_file(filename, in_merge) } - fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError> { - self.get_mut().drop_file(filename) + fn drop_entry_and_copy_source( + &mut self, + filename: &HgPath, + ) -> Result<(), DirstateError> { + self.get_mut().drop_entry_and_copy_source(filename) } fn clear_ambiguous_times( diff -r 29aa633815db -r 2ac0e6b23222 rust/hg-cpython/src/dirstate/dirstate_map.rs --- a/rust/hg-cpython/src/dirstate/dirstate_map.rs Thu Sep 23 15:29:38 2021 +0200 +++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs Thu Sep 23 15:36:43 2021 +0200 @@ -210,13 +210,13 @@ Ok(py.None()) } - def dropfile( + def drop_item_and_copy_source( &self, f: PyBytes, ) -> PyResult { self.inner(py) .borrow_mut() - .drop_file(HgPath::new(f.data(py))) + .drop_entry_and_copy_source(HgPath::new(f.data(py))) .map_err(|e |dirstate_error(py, e))?; Ok(PyNone) }