# HG changeset patch # User Raphaël Gomès # Date 1649148928 -7200 # Node ID fbc02ccc207eaf1a1efeaedbbbcacddf6296a9fc # Parent 2593873cda0f41fdf8e905b49a5a763d9a67788f rust-dirstatemap: properly decrement counter for tracked descendants I found this bug when writing unit tests after the fact for the `DirstateMap`. We never decremented the tracked descendants counter since we were always resetting the node data before reading it. This also drops the use of `state`, in favor of the new API to get that information. Differential Revision: https://phab.mercurial-scm.org/D12431 diff -r 2593873cda0f -r fbc02ccc207e rust/hg-core/src/dirstate_tree/dirstate_map.rs --- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs Tue Apr 05 10:55:28 2022 +0200 +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs Tue Apr 05 10:55:28 2022 +0200 @@ -858,7 +858,9 @@ return Ok(None); } } else { - let had_entry = node.data.has_entry(); + let entry = node.data.as_entry(); + let was_tracked = entry.map_or(false, |entry| entry.tracked()); + let had_entry = entry.is_some(); if had_entry { node.data = NodeData::None } @@ -867,10 +869,7 @@ node.copy_source = None } dropped = Dropped { - was_tracked: node - .data - .as_entry() - .map_or(false, |entry| entry.state().is_tracked()), + was_tracked, had_entry, had_copy_source: node.copy_source.take().is_some(), };