# HG changeset patch # User Raphaël Gomès # Date 2022-04-05 08:55:28 # 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 --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 @@ -858,7 +858,9 @@ impl OwningDirstateMap { 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 @@ impl OwningDirstateMap { 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(), };