diff --git a/rust/hg-core/src/dirstate_tree/dirstate_map.rs b/rust/hg-core/src/dirstate_tree/dirstate_map.rs --- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs @@ -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< diff --git a/rust/hg-core/src/dirstate_tree/status.rs b/rust/hg-core/src/dirstate_tree/status.rs --- a/rust/hg-core/src/dirstate_tree/status.rs +++ b/rust/hg-core/src/dirstate_tree/status.rs @@ -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)?;