# HG changeset patch # User Arseniy Alekseyev # Date 1678472450 0 # Node ID f1f3a8eb93a1521ece5712fe9d2ad30d2c671a6d # Parent adecb1ab4a0d5db96a53929818ad428719eaae8b tests: demonstrate a bug in dirstate-v2 handling of errors diff -r adecb1ab4a0d -r f1f3a8eb93a1 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