tests: demonstrate a bug in dirstate-v2 handling of errors stable
authorArseniy Alekseyev <aalekseyev@janestreet.com>
Fri, 10 Mar 2023 18:20:50 +0000
branchstable
changeset 50293 f1f3a8eb93a1
parent 50292 adecb1ab4a0d
child 50294 bae51b50a5cf
tests: demonstrate a bug in dirstate-v2 handling of errors
tests/test-status-eacces.t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-status-eacces.t	Fri Mar 10 18:20:50 2023 +0000
@@ -0,0 +1,51 @@
+#testcases dirstate-v1 dirstate-v2
+
+#if dirstate-v2
+  $ cat >> $HGRCPATH << EOF
+  > [format]
+  > use-dirstate-v2=1
+  > [storage]
+  > dirstate-v2.slow-path=allow
+  > EOF
+#endif
+
+The proliferation of status implementations can be confusing:
+- The pure python implementation:
+(no-rhg pure !)
+- The C implementation:
+(no-rhg no-rust no-pure !)
+- The two rust implementations:
+(rhg !)
+(no-rhg rust !)
+
+  $ hg init repo1
+  $ cd repo1
+  $ mkdir d1
+  $ touch d1/x
+  $ hg commit -Am.
+  adding d1/x
+  $ touch d1/y
+  $ chmod -r d1
+  $ hg status
+  d1: $EACCES$
+  ! d1/x (rhg !)
+  ! d1/x (no-rhg rust !)
+  $ hg status
+  d1: $EACCES$ (rhg dirstate-v1 !)
+  d1: $EACCES$ (no-rhg rust dirstate-v1 !)
+  d1: $EACCES$ (no-rust no-rhg !)
+  ! d1/x (rust dirstate-v1 !)
+  ! d1/x (no-rust rhg dirstate-v1 !)
+  $ chmod +r d1
+  $ hg status
+  ? d1/y (rhg dirstate-v1 !)
+  ? d1/y (no-rhg rust dirstate-v1 !)
+  ? d1/y (no-rhg no-rust !)
+
+TODO: make the tests marked with (dirstate-v1) above work the same way
+with dirstate-v2 as well.
+
+  $ touch d1/z
+  $ hg status
+  ? d1/y
+  ? d1/z