============================== 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