comparison tests/test-status-tracked-key.t @ 48684:568f63b5a30f

dirstate: introduce a "tracked-key" feature A new format variant is introduced. When used, a `tracked-key` file will be generated. That file will be update when the set of tracked file might have changed. This will be useful for external automation (e.g. build tool) to be notified when the set of relevant files changes. One of the motivation for this changes is to mitigate effect dirstate-v2 has on such automation. Since the dirstate file is updated much more frequently on dirstate-v2, monitoring update to that file is no longer a viable strategy. See the associated documentation for details about the feature To prevent older client to update the repository without updating that file, a new requirements is introduced. The `postfinalizegenerators` business is a bit weird, so I'll likely clean that up soon. Differential Revision: https://phab.mercurial-scm.org/D12124
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 31 Jan 2022 08:44:48 +0100
parents
children 79a967128055
comparison
equal deleted inserted replaced
48683:111f5a0cbcaa 48684:568f63b5a30f
1 ==============================
2 Test the "tracked key" feature
3 ==============================
4
5 The tracked key feature provide a file that get updated when the set of tracked
6 files get updated.
7
8 basic setup
9
10 $ cat << EOF >> $HGRCPATH
11 > [format]
12 > exp-dirstate-tracked-key-version=1
13 > EOF
14
15 $ hg init tracked-key-test
16 $ cd tracked-key-test
17 $ hg debugbuilddag '.+10' -n
18 $ hg log -G -T '{rev} {desc} {files}\n'
19 o 10 r10 nf10
20 |
21 o 9 r9 nf9
22 |
23 o 8 r8 nf8
24 |
25 o 7 r7 nf7
26 |
27 o 6 r6 nf6
28 |
29 o 5 r5 nf5
30 |
31 o 4 r4 nf4
32 |
33 o 3 r3 nf3
34 |
35 o 2 r2 nf2
36 |
37 o 1 r1 nf1
38 |
39 o 0 r0 nf0
40
41 $ hg up tip
42 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
43 $ hg files
44 nf0
45 nf1
46 nf10
47 nf2
48 nf3
49 nf4
50 nf5
51 nf6
52 nf7
53 nf8
54 nf9
55
56 key-file exists
57 -----------
58
59 The tracked key file should exist
60
61 $ ls -1 .hg/dirstate*
62 .hg/dirstate
63 .hg/dirstate-tracked-key
64
65 key-file stay the same if the tracked set is unchanged
66 ------------------------------------------------------
67
68 (copy its content for later comparison)
69
70 $ cp .hg/dirstate-tracked-key ../key-bck
71 $ echo foo >> nf0
72 $ sleep 1
73 $ hg status
74 M nf0
75 $ diff --brief .hg/dirstate-tracked-key ../key-bck
76 $ hg revert -C nf0
77 $ sleep 1
78 $ hg status
79 $ diff --brief .hg/dirstate-tracked-key ../key-bck
80
81 key-file change if the tracked set is changed manually
82 ------------------------------------------------------
83
84 adding a file to tracking
85
86 $ cp .hg/dirstate-tracked-key ../key-bck
87 $ echo x > x
88 $ hg add x
89 $ diff --brief .hg/dirstate-tracked-key ../key-bck
90 Files .hg/dirstate-tracked-key and ../key-bck differ
91 [1]
92
93 remove a file from tracking
94 (forget)
95
96 $ cp .hg/dirstate-tracked-key ../key-bck
97 $ hg forget x
98 $ diff --brief .hg/dirstate-tracked-key ../key-bck
99 Files .hg/dirstate-tracked-key and ../key-bck differ
100 [1]
101
102 (remove)
103
104 $ cp .hg/dirstate-tracked-key ../key-bck
105 $ hg remove nf1
106 $ diff --brief .hg/dirstate-tracked-key ../key-bck
107 Files .hg/dirstate-tracked-key and ../key-bck differ
108 [1]
109
110 key-file changes on revert (when applicable)
111 --------------------------------------------
112
113 $ cp .hg/dirstate-tracked-key ../key-bck
114 $ hg status
115 R nf1
116 ? x
117 $ hg revert --all
118 undeleting nf1
119 $ hg status
120 ? x
121 $ diff --brief .hg/dirstate-tracked-key ../key-bck
122 Files .hg/dirstate-tracked-key and ../key-bck differ
123 [1]
124
125
126 `hg update` does affect the key-file (when needed)
127 --------------------------------------------------
128
129 update changing the tracked set
130
131 (removing)
132
133 $ cp .hg/dirstate-tracked-key ../key-bck
134 $ hg status --rev . --rev '.#generations[-1]'
135 R nf10
136 $ hg up '.#generations[-1]'
137 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
138 $ diff --brief .hg/dirstate-tracked-key ../key-bck
139 Files .hg/dirstate-tracked-key and ../key-bck differ
140 [1]
141
142 (adding)
143
144 $ cp .hg/dirstate-tracked-key ../key-bck
145 $ hg status --rev . --rev '.#generations[1]'
146 A nf10
147 $ hg up '.#generations[1]'
148 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 $ diff --brief .hg/dirstate-tracked-key ../key-bck
150 Files .hg/dirstate-tracked-key and ../key-bck differ
151 [1]
152
153 update not affecting the tracked set
154
155 $ echo foo >> nf0
156 $ hg commit -m foo
157
158 $ cp .hg/dirstate-tracked-key ../key-bck
159 $ hg status --rev . --rev '.#generations[-1]'
160 M nf0
161 $ hg up '.#generations[-1]'
162 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
163 $ diff --brief .hg/dirstate-tracked-key ../key-bck