--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-narrow-acl-excludes.t Thu Jan 04 14:41:18 2024 -0500
@@ -0,0 +1,81 @@
+Test exclusion-based ACL enforcement
+ $ . "$TESTDIR/narrow-library.sh"
+
+ $ hg init master
+ $ cd master
+
+ $ for x in `$TESTDIR/seq.py 3`; do
+ > echo $x > "f$x"
+ > hg add "f$x"
+ > hg commit -m "Add $x"
+ > done
+ $ cat >> .hg/hgrc << EOF
+ > [narrowacl]
+ > default.includes=*
+ > default.excludes=f2 f3
+ > test.excludes=f3
+ > EOF
+ $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
+ $ cat hg.pid >> "$DAEMON_PIDS"
+
+ $ cd ..
+ $ hg clone http://localhost:$HGPORT1 narrowclone1
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 2 changes to 2 files
+ new changesets * (glob)
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+The clone directory should only contain f1 and f2
+ $ ls -A -1 narrowclone1 | sort
+ .hg
+ f1
+ f2
+
+Requirements should contain narrowhg
+ $ hg debugrequires -R narrowclone1 | grep narrowhg
+ narrowhg-experimental
+
+NarrowHG should exclude f3.
+ $ hg -R narrowclone1 tracked
+ I path:.
+ X path:f3
+
+Narrow should not be able to widen to include f3
+ $ hg -R narrowclone1 tracked --addinclude f3
+ comparing with http://localhost:$HGPORT1/
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ $ ls -A -1 narrowclone1 | sort
+ .hg
+ f1
+ f2
+ $ hg -R narrowclone1 tracked
+ I path:.
+ X path:f3
+
+
+Narrow should not be able to remove the exclusion for f3
+ $ hg -R narrowclone1 tracked --removeexclude f3
+ comparing with http://localhost:$HGPORT1/
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 0 changesets with 1 changes to 1 files
+ $ ls -A -1 narrowclone1 | sort
+ .hg
+ f1
+ f2
+ f3
+ $ hg -R narrowclone1 tracked
+ I path:.
+
+
+XXX: BUG! This test demonstrates that we are presently
+able to gain access to f3 by removing the exclusion.