Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 49003
rust-dirstatemap: correctly decrement the copies counter
This was caught when writing unit tests for the `DirstateMap`. We were always
setting `had_copy_source` to `false` since we erased the value just before.
Differential Revision: https://phab.mercurial-scm.org/D12432
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 49002
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
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 49001
rust-dirstate: panic if the DirstateMap counters go below 0
When modifying the API I hit some... interesting errors (trying to allocate
178GB of RAM, for example) because I failed to keep the counters correctly
updated.
This counter underflow is likely to happen when code is changed around
and can have up to eat-your-dirstate level of consequences, which is not nice.
The very small runtime cost of checking these counters should really not be an
issue and will help us uncover bugs when/if they do appear in the future.
Differential Revision: https://phab.mercurial-scm.org/D12430