Mercurial > hg-stable
changeset 49182:f3e8b0b0a8c2
rust-dirstatemap: add `clear_cached_mtime` helper method
This will help remove the `get_or_insert` method, which is dangerous because it
does not take the `DirstateMap` counters into account.
Differential Revision: https://phab.mercurial-scm.org/D12525
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 08 Apr 2022 16:03:39 +0200 |
parents | e7b74bb602a4 |
children | 464747faef14 |
files | rust/hg-core/src/dirstate_tree/dirstate_map.rs rust/hg-core/src/dirstate_tree/status.rs |
diffstat | 2 files changed, 21 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs Tue Mar 29 18:21:40 2022 +0200 +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs Fri Apr 08 16:03:39 2022 +0200 @@ -803,6 +803,26 @@ Ok(()) } + /// Clears the cached mtime for the (potential) folder at `path`. + pub(super) fn clear_cached_mtime( + &mut self, + path: &HgPath, + ) -> Result<(), DirstateV2ParseError> { + let node = match DirstateMap::get_node_mut( + self.on_disk, + &mut self.unreachable_bytes, + &mut self.root, + path, + )? { + Some(node) => node, + None => return Ok(()), + }; + if let NodeData::CachedDirectory { .. } = &node.data { + node.data = NodeData::None + } + Ok(()) + } + fn iter_nodes<'tree>( &'tree self, ) -> impl Iterator<
--- a/rust/hg-core/src/dirstate_tree/status.rs Tue Mar 29 18:21:40 2022 +0200 +++ b/rust/hg-core/src/dirstate_tree/status.rs Fri Apr 08 16:03:39 2022 +0200 @@ -140,10 +140,7 @@ // Remove outdated mtimes before adding new mtimes, in case a given // directory is both for path in &outdated { - let node = dmap.get_or_insert(path)?; - if let NodeData::CachedDirectory { .. } = &node.data { - node.data = NodeData::None - } + dmap.clear_cached_mtime(path)?; } for (path, mtime) in &new_cachable { let node = dmap.get_or_insert(path)?;