--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-status-tracked-key.t Mon Jan 31 08:44:48 2022 +0100
@@ -0,0 +1,163 @@
+==============================
+Test the "tracked key" feature
+==============================
+
+The tracked key feature provide a file that get updated when the set of tracked
+files get updated.
+
+basic setup
+
+ $ cat << EOF >> $HGRCPATH
+ > [format]
+ > exp-dirstate-tracked-key-version=1
+ > EOF
+
+ $ hg init tracked-key-test
+ $ cd tracked-key-test
+ $ hg debugbuilddag '.+10' -n
+ $ hg log -G -T '{rev} {desc} {files}\n'
+ o 10 r10 nf10
+ |
+ o 9 r9 nf9
+ |
+ o 8 r8 nf8
+ |
+ o 7 r7 nf7
+ |
+ o 6 r6 nf6
+ |
+ o 5 r5 nf5
+ |
+ o 4 r4 nf4
+ |
+ o 3 r3 nf3
+ |
+ o 2 r2 nf2
+ |
+ o 1 r1 nf1
+ |
+ o 0 r0 nf0
+
+ $ hg up tip
+ 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg files
+ nf0
+ nf1
+ nf10
+ nf2
+ nf3
+ nf4
+ nf5
+ nf6
+ nf7
+ nf8
+ nf9
+
+key-file exists
+-----------
+
+The tracked key file should exist
+
+ $ ls -1 .hg/dirstate*
+ .hg/dirstate
+ .hg/dirstate-tracked-key
+
+key-file stay the same if the tracked set is unchanged
+------------------------------------------------------
+
+(copy its content for later comparison)
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ echo foo >> nf0
+ $ sleep 1
+ $ hg status
+ M nf0
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ $ hg revert -C nf0
+ $ sleep 1
+ $ hg status
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+
+key-file change if the tracked set is changed manually
+------------------------------------------------------
+
+adding a file to tracking
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ echo x > x
+ $ hg add x
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+remove a file from tracking
+(forget)
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg forget x
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+(remove)
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg remove nf1
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+key-file changes on revert (when applicable)
+--------------------------------------------
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg status
+ R nf1
+ ? x
+ $ hg revert --all
+ undeleting nf1
+ $ hg status
+ ? x
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+
+`hg update` does affect the key-file (when needed)
+--------------------------------------------------
+
+update changing the tracked set
+
+(removing)
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg status --rev . --rev '.#generations[-1]'
+ R nf10
+ $ hg up '.#generations[-1]'
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+(adding)
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg status --rev . --rev '.#generations[1]'
+ A nf10
+ $ hg up '.#generations[1]'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck
+ Files .hg/dirstate-tracked-key and ../key-bck differ
+ [1]
+
+update not affecting the tracked set
+
+ $ echo foo >> nf0
+ $ hg commit -m foo
+
+ $ cp .hg/dirstate-tracked-key ../key-bck
+ $ hg status --rev . --rev '.#generations[-1]'
+ M nf0
+ $ hg up '.#generations[-1]'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ diff --brief .hg/dirstate-tracked-key ../key-bck