rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite stable
authorRaphaël Gomès <rgomes@octobus.net>
Thu, 28 Apr 2022 17:11:51 +0200
branchstable
changeset 49155 c69adc82e7f7
parent 49154 51262af89efe
child 49156 09984dc70352
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite This was picked up by @aalekseyev when doing unrelated debugging. The Rust implementation was never resetting this counter, so a brand new file would carry over the old counter. As I write this, my counter is a supposed 7389089 unused bytes for a total of 170978 bytes in the data file. Feel free to post your own high score. Differential Revision: https://phab.mercurial-scm.org/D12593
tests/test-dirstate.t
--- a/tests/test-dirstate.t	Thu Apr 28 16:24:55 2022 +0200
+++ b/tests/test-dirstate.t	Thu Apr 28 17:11:51 2022 +0200
@@ -166,6 +166,25 @@
    *1 (re)
   $ dirstate_uuid_has_not_changed
 
+Unused bytes counter is non-0 when appending
+  $ touch file
+  $ hg add file
+  $ current_uid=$(find_dirstate_uuid)
+
+Trigger a rust/rhg run which updates the unused bytes value
+  $ hg st
+  M dir2/f
+  A file
+  $ dirstate_data_files | wc -l
+   *1 (re)
+  $ dirstate_uuid_has_not_changed
+
+  $ hg debugstate --docket | grep unused
+  number of unused bytes: 0 (no-rust no-rhg !)
+  number of unused bytes: [1-9]\d* (re) (rhg no-rust !)
+  number of unused bytes: [1-9]\d* (re) (rust no-rhg !)
+  number of unused bytes: [1-9]\d* (re) (rust rhg !)
+
 Delete most of the dirstate to trigger a non-append
   $ hg rm dir/a dir/b dir/c dir/d
   $ dirstate_data_files | wc -l
@@ -173,5 +192,12 @@
   $ dirstate_uuid_has_not_changed also-if-python
   [1]
 
+Check that unused bytes counter is reset when creating a new docket
+
+  $ hg debugstate --docket | grep unused
+  number of unused bytes: 0 (no-rust !)
+  number of unused bytes: [1-9]\d* (re) (rust known-bad-output !)
+
+#endif
+
   $ cd ..
-#endif