Mercurial > hg
comparison tests/test-branches-obsolete.t @ 51522:5f9350956c03
branchcache: add more test for the logic around obsolescence and branch heads
While working on branch-cache-v3, we noticed some ambiguity in the
filtered+obsolete hash. However this was only caught by a rebase test by
chance.
It seems important to explicitly tests these cases.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 28 Feb 2024 12:56:08 +0100 |
parents | |
children | 88b0e07dd2cd |
comparison
equal
deleted
inserted
replaced
51521:0d4a6ab3c8da | 51522:5f9350956c03 |
---|---|
1 ================================================================ | |
2 test the interaction of the branch cache with obsolete changeset | |
3 ================================================================ | |
4 | |
5 Some corner case have been covered by unrelated test (like rebase ones) this | |
6 file meant to gather explicite testing of those. | |
7 | |
8 See also: test-obsolete-checkheads.t | |
9 | |
10 #testcases v2 v3 | |
11 | |
12 $ cat >> $HGRCPATH << EOF | |
13 > [phases] | |
14 > publish = false | |
15 > [experimental] | |
16 > evolution = all | |
17 > server.allow-hidden-access = * | |
18 > EOF | |
19 | |
20 #if v3 | |
21 $ cat <<EOF >> $HGRCPATH | |
22 > [experimental] | |
23 > branch-cache-v3=yes | |
24 > EOF | |
25 #else | |
26 $ cat <<EOF >> $HGRCPATH | |
27 > [experimental] | |
28 > branch-cache-v3=no | |
29 > EOF | |
30 #endif | |
31 | |
32 Setup graph | |
33 ############# | |
34 | |
35 $ . $RUNTESTDIR/testlib/common.sh | |
36 | |
37 graph with a single branch | |
38 -------------------------- | |
39 | |
40 We want some branching and some obsolescence | |
41 | |
42 $ hg init main-single-branch | |
43 $ cd main-single-branch | |
44 $ mkcommit root | |
45 $ mkcommit A_1 | |
46 $ mkcommit A_2 | |
47 $ hg update 'desc("A_2")' --quiet | |
48 $ mkcommit B_1 | |
49 $ mkcommit B_2 | |
50 $ mkcommit B_3 | |
51 $ mkcommit B_4 | |
52 $ hg update 'desc("A_2")' --quiet | |
53 $ mkcommit A_3 | |
54 created new head | |
55 $ mkcommit A_4 | |
56 $ hg up null --quiet | |
57 $ hg clone --noupdate . ../main-single-branch-pre-ops | |
58 $ hg log -r 'desc("A_1")' -T '{node}' > ../main-single-branch-node_A1 | |
59 $ hg log -r 'desc("A_2")' -T '{node}' > ../main-single-branch-node_A2 | |
60 $ hg log -r 'desc("A_3")' -T '{node}' > ../main-single-branch-node_A3 | |
61 $ hg log -r 'desc("A_4")' -T '{node}' > ../main-single-branch-node_A4 | |
62 $ hg log -r 'desc("B_1")' -T '{node}' > ../main-single-branch-node_B1 | |
63 $ hg log -r 'desc("B_2")' -T '{node}' > ../main-single-branch-node_B2 | |
64 $ hg log -r 'desc("B_3")' -T '{node}' > ../main-single-branch-node_B3 | |
65 $ hg log -r 'desc("B_4")' -T '{node}' > ../main-single-branch-node_B4 | |
66 | |
67 (double check the heads are right before we obsolete) | |
68 | |
69 $ hg log -R ../main-single-branch-pre-ops -G -T '{desc}\n' | |
70 o A_4 | |
71 | | |
72 o A_3 | |
73 | | |
74 | o B_4 | |
75 | | | |
76 | o B_3 | |
77 | | | |
78 | o B_2 | |
79 | | | |
80 | o B_1 | |
81 |/ | |
82 o A_2 | |
83 | | |
84 o A_1 | |
85 | | |
86 o root | |
87 | |
88 $ hg log -G -T '{desc}\n' | |
89 o A_4 | |
90 | | |
91 o A_3 | |
92 | | |
93 | o B_4 | |
94 | | | |
95 | o B_3 | |
96 | | | |
97 | o B_2 | |
98 | | | |
99 | o B_1 | |
100 |/ | |
101 o A_2 | |
102 | | |
103 o A_1 | |
104 | | |
105 o root | |
106 | |
107 $ hg log -T '{desc}\n' --rev 'head()' | |
108 B_4 | |
109 A_4 | |
110 | |
111 Absolete a couple of changes | |
112 | |
113 $ for d in B2 B3 B4 A4; do | |
114 > hg debugobsolete --record-parents `cat ../main-single-branch-node_$d`; | |
115 > done | |
116 1 new obsolescence markers | |
117 obsoleted 1 changesets | |
118 2 new orphan changesets | |
119 1 new obsolescence markers | |
120 obsoleted 1 changesets | |
121 1 new obsolescence markers | |
122 obsoleted 1 changesets | |
123 1 new obsolescence markers | |
124 obsoleted 1 changesets | |
125 | |
126 (double check the result is okay) | |
127 | |
128 $ hg log -G -T '{desc}\n' | |
129 o A_3 | |
130 | | |
131 | o B_1 | |
132 |/ | |
133 o A_2 | |
134 | | |
135 o A_1 | |
136 | | |
137 o root | |
138 | |
139 $ hg heads -T '{desc}\n' | |
140 A_3 | |
141 B_1 | |
142 $ cd .. | |
143 | |
144 | |
145 Actual testing | |
146 ############## | |
147 | |
148 Revealing obsolete changeset | |
149 ---------------------------- | |
150 | |
151 Check that revealing obsolete changesets does not confuse branch computation and checks | |
152 | |
153 Revealing tipmost changeset | |
154 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
155 | |
156 | |
157 $ cp -R ./main-single-branch tmp-repo | |
158 $ cd tmp-repo | |
159 $ hg update --hidden --rev 'desc("A_4")' --quiet | |
160 updated to hidden changeset 3d808bbc9440 | |
161 (hidden revision '3d808bbc9440' is pruned) | |
162 $ hg log -G -T '{desc}\n' | |
163 @ A_4 | |
164 | | |
165 o A_3 | |
166 | | |
167 | o B_1 | |
168 |/ | |
169 o A_2 | |
170 | | |
171 o A_1 | |
172 | | |
173 o root | |
174 | |
175 $ hg heads -T '{desc}\n' | |
176 A_3 | |
177 B_1 | |
178 | |
179 Even when computing branches from scratch | |
180 | |
181 $ rm -rf .hg/cache/branch* | |
182 $ rm -rf .hg/wcache/branch* | |
183 $ hg heads -T '{desc}\n' | |
184 A_3 | |
185 B_1 | |
186 | |
187 And we can get back to normal | |
188 | |
189 $ hg update null --quiet | |
190 $ hg heads -T '{desc}\n' | |
191 A_3 | |
192 B_1 | |
193 | |
194 $ cd .. | |
195 $ rm -rf tmp-repo | |
196 | |
197 Revealing changeset in the middle of the changelog | |
198 ~~~~~~~~~~~~~~~~~~~~~~~~~~~------------------------ | |
199 | |
200 Check that revealing an obsolete changeset does not confuse branch computation and checks | |
201 | |
202 $ cp -R ./main-single-branch tmp-repo | |
203 $ cd tmp-repo | |
204 $ hg update --hidden --rev 'desc("B_3")' --quiet | |
205 updated to hidden changeset 9c996d7674bb | |
206 (hidden revision '9c996d7674bb' is pruned) | |
207 $ hg log -G -T '{desc}\n' | |
208 o A_3 | |
209 | | |
210 | @ B_3 | |
211 | | | |
212 | x B_2 | |
213 | | | |
214 | o B_1 | |
215 |/ | |
216 o A_2 | |
217 | | |
218 o A_1 | |
219 | | |
220 o root | |
221 | |
222 $ hg heads -T '{desc}\n' | |
223 A_3 | |
224 B_1 | |
225 | |
226 Even when computing branches from scratch | |
227 | |
228 $ rm -rf .hg/cache/branch* | |
229 $ rm -rf .hg/wcache/branch* | |
230 $ hg heads -T '{desc}\n' | |
231 A_3 | |
232 B_1 | |
233 | |
234 And we can get back to normal | |
235 | |
236 $ hg update null --quiet | |
237 $ hg heads -T '{desc}\n' | |
238 A_3 | |
239 B_1 | |
240 | |
241 $ cd .. | |
242 $ rm -rf tmp-repo | |
243 | |
244 Getting the obsolescence marker after the fact for the tip rev | |
245 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
246 | |
247 $ cp -R ./main-single-branch-pre-ops tmp-repo | |
248 $ cd tmp-repo | |
249 $ hg update --hidden --rev 'desc("A_4")' --quiet | |
250 $ hg log -G -T '{desc}\n' | |
251 @ A_4 | |
252 | | |
253 o A_3 | |
254 | | |
255 | o B_4 | |
256 | | | |
257 | o B_3 | |
258 | | | |
259 | o B_2 | |
260 | | | |
261 | o B_1 | |
262 |/ | |
263 o A_2 | |
264 | | |
265 o A_1 | |
266 | | |
267 o root | |
268 | |
269 $ hg heads -T '{desc}\n' | |
270 A_4 | |
271 B_4 | |
272 $ hg pull --rev `cat ../main-single-branch-node_A4` --remote-hidden | |
273 pulling from $TESTTMP/main-single-branch | |
274 no changes found | |
275 1 new obsolescence markers | |
276 obsoleted 1 changesets | |
277 | |
278 branch head are okay | |
279 | |
280 $ hg heads -T '{desc}\n' | |
281 A_3 | |
282 B_4 | |
283 | |
284 Even when computing branches from scratch | |
285 | |
286 $ rm -rf .hg/cache/branch* | |
287 $ rm -rf .hg/wcache/branch* | |
288 $ hg heads -T '{desc}\n' | |
289 A_3 | |
290 B_4 | |
291 | |
292 And we can get back to normal | |
293 | |
294 $ hg update null --quiet | |
295 $ hg heads -T '{desc}\n' | |
296 A_3 | |
297 B_4 | |
298 | |
299 $ cd .. | |
300 $ rm -rf tmp-repo | |
301 | |
302 Getting the obsolescence marker after the fact for another rev | |
303 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
304 | |
305 $ cp -R ./main-single-branch-pre-ops tmp-repo | |
306 $ cd tmp-repo | |
307 $ hg update --hidden --rev 'desc("B_3")' --quiet | |
308 $ hg log -G -T '{desc}\n' | |
309 o A_4 | |
310 | | |
311 o A_3 | |
312 | | |
313 | o B_4 | |
314 | | | |
315 | @ B_3 | |
316 | | | |
317 | o B_2 | |
318 | | | |
319 | o B_1 | |
320 |/ | |
321 o A_2 | |
322 | | |
323 o A_1 | |
324 | | |
325 o root | |
326 | |
327 $ hg heads -T '{desc}\n' | |
328 A_4 | |
329 B_4 | |
330 $ hg pull --rev `cat ../main-single-branch-node_B4` --remote-hidden | |
331 pulling from $TESTTMP/main-single-branch | |
332 no changes found | |
333 3 new obsolescence markers | |
334 obsoleted 3 changesets | |
335 | |
336 branch head are okay | |
337 | |
338 $ hg heads -T '{desc}\n' | |
339 A_4 | |
340 B_1 | |
341 | |
342 Even when computing branches from scratch | |
343 | |
344 $ rm -rf .hg/cache/branch* | |
345 $ rm -rf .hg/wcache/branch* | |
346 $ hg heads -T '{desc}\n' | |
347 A_4 | |
348 B_1 | |
349 | |
350 And we can get back to normal | |
351 | |
352 $ hg update null --quiet | |
353 $ hg heads -T '{desc}\n' | |
354 A_4 | |
355 B_1 | |
356 | |
357 $ cd .. | |
358 $ rm -rf tmp-repo |