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
--- 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(),
};