--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-narrow-commit.t Mon Jan 29 16:19:33 2018 -0500
@@ -0,0 +1,79 @@
+ $ . "$TESTDIR/narrow-library.sh"
+
+create full repo
+
+ $ hg init master
+ $ cd master
+
+ $ mkdir inside
+ $ echo inside > inside/f1
+ $ mkdir outside
+ $ echo outside > outside/f1
+ $ hg ci -Aqm 'initial'
+
+ $ echo modified > inside/f1
+ $ hg ci -qm 'modify inside'
+
+ $ echo modified > outside/f1
+ $ hg ci -qm 'modify outside'
+
+ $ cd ..
+
+ $ hg clone --narrow ssh://user@dummy/master narrow --include inside
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 2 changes to 1 files
+ new changesets *:* (glob)
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd narrow
+
+ $ hg update -q 0
+
+Can not modify dirstate outside
+
+ $ mkdir outside
+ $ touch outside/f1
+ $ hg debugwalk -I 'relglob:f1'
+ matcher: <includematcher includes='(?:(?:|.*/)f1(?:/|$))'>
+ f inside/f1 inside/f1
+ $ hg add outside/f1
+ abort: cannot track 'outside/f1' - it is outside the narrow clone
+ [255]
+ $ touch outside/f3
+ $ hg add outside/f3
+ abort: cannot track 'outside/f3' - it is outside the narrow clone
+ [255]
+ $ rm -r outside
+
+Can modify dirstate inside
+
+ $ echo modified > inside/f1
+ $ touch inside/f3
+ $ hg add inside/f3
+ $ hg status
+ M inside/f1
+ A inside/f3
+ $ hg revert -qC .
+ $ rm inside/f3
+
+Can commit changes inside. Leaves outside unchanged.
+
+ $ hg update -q 'desc("initial")'
+ $ echo modified2 > inside/f1
+ $ hg commit -m 'modify inside/f1'
+ created new head
+ $ hg files -r .
+ inside/f1
+ outside/f1
+Some filesystems (notably FAT/exFAT only store timestamps with 2
+seconds of precision, so by sleeping for 3 seconds, we can ensure that
+the timestamps of files stored by dirstate will appear older than the
+dirstate file, and therefore we'll be able to get stable output from
+debugdirstate. If we don't do this, the test can be slightly flaky.
+ $ sleep 3
+ $ hg status
+ $ hg debugdirstate --nodates
+ n 644 10 set inside/f1