##// END OF EJS Templates
tests: minor cleanup to treemanifest test
Martin von Zweigbergk -
r27952:c5ffbd4c stable
parent child Browse files
Show More
@@ -1,505 +1,505 b''
1 1 $ cat << EOF >> $HGRCPATH
2 2 > [format]
3 3 > usegeneraldelta=yes
4 4 > EOF
5 5
6 6 Set up repo
7 7
8 8 $ hg --config experimental.treemanifest=True init repo
9 9 $ cd repo
10 10
11 11 Requirements get set on init
12 12
13 13 $ grep treemanifest .hg/requires
14 14 treemanifest
15 15
16 16 Without directories, looks like any other repo
17 17
18 18 $ echo 0 > a
19 19 $ echo 0 > b
20 20 $ hg ci -Aqm initial
21 21 $ hg debugdata -m 0
22 22 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
23 23 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
24 24
25 25 Submanifest is stored in separate revlog
26 26
27 27 $ mkdir dir1
28 28 $ echo 1 > dir1/a
29 29 $ echo 1 > dir1/b
30 30 $ echo 1 > e
31 31 $ hg ci -Aqm 'add dir1'
32 32 $ hg debugdata -m 1
33 33 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
34 34 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
35 35 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
36 36 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
37 37 $ hg debugdata --dir dir1 0
38 38 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
39 39 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
40 40
41 41 Can add nested directories
42 42
43 43 $ mkdir dir1/dir1
44 44 $ echo 2 > dir1/dir1/a
45 45 $ echo 2 > dir1/dir1/b
46 46 $ mkdir dir1/dir2
47 47 $ echo 2 > dir1/dir2/a
48 48 $ echo 2 > dir1/dir2/b
49 49 $ hg ci -Aqm 'add dir1/dir1'
50 50 $ hg files -r .
51 51 a
52 52 b
53 53 dir1/a (glob)
54 54 dir1/b (glob)
55 55 dir1/dir1/a (glob)
56 56 dir1/dir1/b (glob)
57 57 dir1/dir2/a (glob)
58 58 dir1/dir2/b (glob)
59 59 e
60 60
61 61 Revision is not created for unchanged directory
62 62
63 63 $ mkdir dir2
64 64 $ echo 3 > dir2/a
65 65 $ hg add dir2
66 66 adding dir2/a (glob)
67 67 $ hg debugindex --dir dir1 > before
68 68 $ hg ci -qm 'add dir2'
69 69 $ hg debugindex --dir dir1 > after
70 70 $ diff before after
71 71 $ rm before after
72 72
73 73 Removing directory does not create an revlog entry
74 74
75 75 $ hg rm dir1/dir1
76 76 removing dir1/dir1/a (glob)
77 77 removing dir1/dir1/b (glob)
78 78 $ hg debugindex --dir dir1/dir1 > before
79 79 $ hg ci -qm 'remove dir1/dir1'
80 80 $ hg debugindex --dir dir1/dir1 > after
81 81 $ diff before after
82 82 $ rm before after
83 83
84 84 Check that hg files (calls treemanifest.walk()) works
85 85 without loading all directory revlogs
86 86
87 87 $ hg co 'desc("add dir2")'
88 88 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
89 89 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
90 90 $ hg files -r . dir1
91 91 dir1/a (glob)
92 92 dir1/b (glob)
93 93 dir1/dir1/a (glob)
94 94 dir1/dir1/b (glob)
95 95 dir1/dir2/a (glob)
96 96 dir1/dir2/b (glob)
97 97
98 98 Check that status between revisions works (calls treemanifest.matches())
99 99 without loading all directory revlogs
100 100
101 101 $ hg status --rev 'desc("add dir1")' --rev . dir1
102 102 A dir1/dir1/a
103 103 A dir1/dir1/b
104 104 A dir1/dir2/a
105 105 A dir1/dir2/b
106 106 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
107 107
108 108 Merge creates 2-parent revision of directory revlog
109 109
110 110 $ echo 5 > dir1/a
111 111 $ hg ci -Aqm 'modify dir1/a'
112 112 $ hg co '.^'
113 113 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
114 114 $ echo 6 > dir1/b
115 115 $ hg ci -Aqm 'modify dir1/b'
116 116 $ hg merge 'desc("modify dir1/a")'
117 117 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
118 118 (branch merge, don't forget to commit)
119 119 $ hg ci -m 'conflict-free merge involving dir1/'
120 120 $ cat dir1/a
121 121 5
122 122 $ cat dir1/b
123 123 6
124 124 $ hg debugindex --dir dir1
125 125 rev offset length delta linkrev nodeid p1 p2
126 126 0 0 54 -1 1 8b3ffd73f901 000000000000 000000000000
127 127 1 54 68 0 2 68e9d057c5a8 8b3ffd73f901 000000000000
128 128 2 122 12 1 4 4698198d2624 68e9d057c5a8 000000000000
129 129 3 134 55 1 5 44844058ccce 68e9d057c5a8 000000000000
130 130 4 189 55 1 6 bf3d9b744927 68e9d057c5a8 000000000000
131 131 5 244 55 4 7 dde7c0af2a03 bf3d9b744927 44844058ccce
132 132
133 133 Merge keeping directory from parent 1 does not create revlog entry. (Note that
134 134 dir1's manifest does change, but only because dir1/a's filelog changes.)
135 135
136 136 $ hg co 'desc("add dir2")'
137 137 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
138 138 $ echo 8 > dir2/a
139 139 $ hg ci -m 'modify dir2/a'
140 140 created new head
141 141
142 142 $ hg debugindex --dir dir2 > before
143 143 $ hg merge 'desc("modify dir1/a")'
144 144 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
145 145 (branch merge, don't forget to commit)
146 146 $ hg revert -r 'desc("modify dir2/a")' .
147 147 reverting dir1/a (glob)
148 148 $ hg ci -m 'merge, keeping parent 1'
149 149 $ hg debugindex --dir dir2 > after
150 150 $ diff before after
151 151 $ rm before after
152 152
153 153 Merge keeping directory from parent 2 does not create revlog entry. (Note that
154 154 dir2's manifest does change, but only because dir2/a's filelog changes.)
155 155
156 156 $ hg co 'desc("modify dir2/a")'
157 157 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
158 158 $ hg debugindex --dir dir1 > before
159 159 $ hg merge 'desc("modify dir1/a")'
160 160 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
161 161 (branch merge, don't forget to commit)
162 162 $ hg revert -r 'desc("modify dir1/a")' .
163 163 reverting dir2/a (glob)
164 164 $ hg ci -m 'merge, keeping parent 2'
165 165 created new head
166 166 $ hg debugindex --dir dir1 > after
167 167 $ diff before after
168 168 $ rm before after
169 169
170 170 Create flat source repo for tests with mixed flat/tree manifests
171 171
172 172 $ cd ..
173 173 $ hg init repo-flat
174 174 $ cd repo-flat
175 175
176 176 Create a few commits with flat manifest
177 177
178 178 $ echo 0 > a
179 179 $ echo 0 > b
180 180 $ echo 0 > e
181 181 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
182 182 > do
183 183 > mkdir $d
184 184 > echo 0 > $d/a
185 185 > echo 0 > $d/b
186 186 > done
187 187 $ hg ci -Aqm initial
188 188
189 189 $ echo 1 > a
190 190 $ echo 1 > dir1/a
191 191 $ echo 1 > dir1/dir1/a
192 192 $ hg ci -Aqm 'modify on branch 1'
193 193
194 194 $ hg co 0
195 195 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
196 196 $ echo 2 > b
197 197 $ echo 2 > dir1/b
198 198 $ echo 2 > dir1/dir1/b
199 199 $ hg ci -Aqm 'modify on branch 2'
200 200
201 201 $ hg merge 1
202 202 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
203 203 (branch merge, don't forget to commit)
204 204 $ hg ci -m 'merge of flat manifests to new flat manifest'
205 205
206 206 Create clone with tree manifests enabled
207 207
208 208 $ cd ..
209 209 $ hg clone --pull --config experimental.treemanifest=1 repo-flat repo-mixed
210 210 requesting all changes
211 211 adding changesets
212 212 adding manifests
213 213 adding file changes
214 214 added 4 changesets with 17 changes to 11 files
215 215 updating to branch default
216 216 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
217 217 $ cd repo-mixed
218 $ test -f .hg/store/meta
218 $ test -d .hg/store/meta
219 219 [1]
220 220 $ grep treemanifest .hg/requires
221 221 treemanifest
222 222
223 223 Commit should store revlog per directory
224 224
225 225 $ hg co 1
226 226 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
227 227 $ echo 3 > a
228 228 $ echo 3 > dir1/a
229 229 $ echo 3 > dir1/dir1/a
230 230 $ hg ci -m 'first tree'
231 231 created new head
232 232 $ find .hg/store/meta | sort
233 233 .hg/store/meta
234 234 .hg/store/meta/dir1
235 235 .hg/store/meta/dir1/00manifest.i
236 236 .hg/store/meta/dir1/dir1
237 237 .hg/store/meta/dir1/dir1/00manifest.i
238 238 .hg/store/meta/dir1/dir2
239 239 .hg/store/meta/dir1/dir2/00manifest.i
240 240 .hg/store/meta/dir2
241 241 .hg/store/meta/dir2/00manifest.i
242 242
243 243 Merge of two trees
244 244
245 245 $ hg co 2
246 246 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
247 247 $ hg merge 1
248 248 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
249 249 (branch merge, don't forget to commit)
250 250 $ hg ci -m 'merge of flat manifests to new tree manifest'
251 251 created new head
252 252 $ hg diff -r 3
253 253
254 254 Parent of tree root manifest should be flat manifest, and two for merge
255 255
256 256 $ hg debugindex -m
257 257 rev offset length delta linkrev nodeid p1 p2
258 258 0 0 80 -1 0 40536115ed9e 000000000000 000000000000
259 259 1 80 83 0 1 f3376063c255 40536115ed9e 000000000000
260 260 2 163 89 0 2 5d9b9da231a2 40536115ed9e 000000000000
261 261 3 252 83 2 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
262 262 4 335 124 1 4 51e32a8c60ee f3376063c255 000000000000
263 263 5 459 126 2 5 cc5baa78b230 5d9b9da231a2 f3376063c255
264 264
265 265
266 266 Status across flat/tree boundary should work
267 267
268 268 $ hg status --rev '.^' --rev .
269 269 M a
270 270 M dir1/a
271 271 M dir1/dir1/a
272 272
273 273
274 274 Turning off treemanifest config has no effect
275 275
276 $ hg debugindex .hg/store/meta/dir1/00manifest.i
276 $ hg debugindex --dir dir1
277 277 rev offset length delta linkrev nodeid p1 p2
278 278 0 0 127 -1 4 064927a0648a 000000000000 000000000000
279 279 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
280 280 $ echo 2 > dir1/a
281 281 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
282 $ hg debugindex .hg/store/meta/dir1/00manifest.i
282 $ hg debugindex --dir dir1
283 283 rev offset length delta linkrev nodeid p1 p2
284 284 0 0 127 -1 4 064927a0648a 000000000000 000000000000
285 285 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
286 286 2 238 55 1 6 5b16163a30c6 25ecb8cb8618 000000000000
287 287
288 288 Stripping and recovering changes should work
289 289
290 290 $ hg st --change tip
291 291 M dir1/a
292 292 $ hg --config extensions.strip= strip tip
293 293 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
294 294 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg (glob)
295 295 $ hg unbundle -q .hg/strip-backup/*
296 296 $ hg st --change tip
297 297 M dir1/a
298 298
299 299 Shelving and unshelving should work
300 300
301 301 $ echo foo >> dir1/a
302 302 $ hg --config extensions.shelve= shelve
303 303 shelved as default
304 304 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
305 305 $ hg --config extensions.shelve= unshelve
306 306 unshelving change 'default'
307 307 $ hg diff --nodates
308 308 diff -r 708a273da119 dir1/a
309 309 --- a/dir1/a
310 310 +++ b/dir1/a
311 311 @@ -1,1 +1,2 @@
312 312 1
313 313 +foo
314 314
315 315 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
316 316
317 317 $ cd ..
318 318 $ hg init empty-repo
319 319 $ cat << EOF >> empty-repo/.hg/hgrc
320 320 > [experimental]
321 321 > changegroup3=yes
322 322 > EOF
323 323 $ grep treemanifest empty-repo/.hg/requires
324 324 [1]
325 325 $ hg push -R repo -r 0 empty-repo
326 326 pushing to empty-repo
327 327 searching for changes
328 328 adding changesets
329 329 adding manifests
330 330 adding file changes
331 331 added 1 changesets with 2 changes to 2 files
332 332 $ grep treemanifest empty-repo/.hg/requires
333 333 treemanifest
334 334
335 335 Pushing to an empty repo works
336 336
337 337 $ hg --config experimental.treemanifest=1 init clone
338 338 $ grep treemanifest clone/.hg/requires
339 339 treemanifest
340 340 $ hg push -R repo clone
341 341 pushing to clone
342 342 searching for changes
343 343 adding changesets
344 344 adding manifests
345 345 adding file changes
346 346 added 11 changesets with 15 changes to 10 files (+3 heads)
347 347 $ grep treemanifest clone/.hg/requires
348 348 treemanifest
349 349
350 350 Create deeper repo with tree manifests.
351 351
352 352 $ hg --config experimental.treemanifest=True init deeprepo
353 353 $ cd deeprepo
354 354
355 355 $ mkdir a
356 356 $ mkdir b
357 357 $ mkdir b/bar
358 358 $ mkdir b/bar/orange
359 359 $ mkdir b/bar/orange/fly
360 360 $ mkdir b/foo
361 361 $ mkdir b/foo/apple
362 362 $ mkdir b/foo/apple/bees
363 363
364 364 $ touch a/one.txt
365 365 $ touch a/two.txt
366 366 $ touch b/bar/fruits.txt
367 367 $ touch b/bar/orange/fly/gnat.py
368 368 $ touch b/bar/orange/fly/housefly.txt
369 369 $ touch b/foo/apple/bees/flower.py
370 370 $ touch c.txt
371 371 $ touch d.py
372 372
373 373 $ hg ci -Aqm 'initial'
374 374
375 375 We'll see that visitdir works by removing some treemanifest revlogs and running
376 376 the files command with various parameters.
377 377
378 378 Test files from the root.
379 379
380 380 $ hg files -r .
381 381 a/one.txt (glob)
382 382 a/two.txt (glob)
383 383 b/bar/fruits.txt (glob)
384 384 b/bar/orange/fly/gnat.py (glob)
385 385 b/bar/orange/fly/housefly.txt (glob)
386 386 b/foo/apple/bees/flower.py (glob)
387 387 c.txt
388 388 d.py
389 389
390 390 Excludes with a glob should not exclude everything from the glob's root
391 391
392 392 $ hg files -r . -X 'b/fo?' b
393 393 b/bar/fruits.txt (glob)
394 394 b/bar/orange/fly/gnat.py (glob)
395 395 b/bar/orange/fly/housefly.txt (glob)
396 396
397 397 Test files for a subdirectory.
398 398
399 399 $ mv .hg/store/meta/a oldmf
400 400 $ hg files -r . b
401 401 b/bar/fruits.txt (glob)
402 402 b/bar/orange/fly/gnat.py (glob)
403 403 b/bar/orange/fly/housefly.txt (glob)
404 404 b/foo/apple/bees/flower.py (glob)
405 405 $ mv oldmf .hg/store/meta/a
406 406
407 407 Test files with just includes and excludes.
408 408
409 409 $ mv .hg/store/meta/a oldmf
410 410 $ mv .hg/store/meta/b/bar/orange/fly oldmf2
411 411 $ mv .hg/store/meta/b/foo/apple/bees oldmf3
412 412 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
413 413 b/bar/fruits.txt (glob)
414 414 $ mv oldmf .hg/store/meta/a
415 415 $ mv oldmf2 .hg/store/meta/b/bar/orange/fly
416 416 $ mv oldmf3 .hg/store/meta/b/foo/apple/bees
417 417
418 418 Test files for a subdirectory, excluding a directory within it.
419 419
420 420 $ mv .hg/store/meta/a oldmf
421 421 $ mv .hg/store/meta/b/foo oldmf2
422 422 $ hg files -r . -X path:b/foo b
423 423 b/bar/fruits.txt (glob)
424 424 b/bar/orange/fly/gnat.py (glob)
425 425 b/bar/orange/fly/housefly.txt (glob)
426 426 $ mv oldmf .hg/store/meta/a
427 427 $ mv oldmf2 .hg/store/meta/b/foo
428 428
429 429 Test files for a sub directory, including only a directory within it, and
430 430 including an unrelated directory.
431 431
432 432 $ mv .hg/store/meta/a oldmf
433 433 $ mv .hg/store/meta/b/foo oldmf2
434 434 $ hg files -r . -I path:b/bar/orange -I path:a b
435 435 b/bar/orange/fly/gnat.py (glob)
436 436 b/bar/orange/fly/housefly.txt (glob)
437 437 $ mv oldmf .hg/store/meta/a
438 438 $ mv oldmf2 .hg/store/meta/b/foo
439 439
440 440 Test files for a pattern, including a directory, and excluding a directory
441 441 within that.
442 442
443 443 $ mv .hg/store/meta/a oldmf
444 444 $ mv .hg/store/meta/b/foo oldmf2
445 445 $ mv .hg/store/meta/b/bar/orange oldmf3
446 446 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
447 447 b/bar/fruits.txt (glob)
448 448 $ mv oldmf .hg/store/meta/a
449 449 $ mv oldmf2 .hg/store/meta/b/foo
450 450 $ mv oldmf3 .hg/store/meta/b/bar/orange
451 451
452 452 Add some more changes to the deep repo
453 453 $ echo narf >> b/bar/fruits.txt
454 454 $ hg ci -m narf
455 455 $ echo troz >> b/bar/orange/fly/gnat.py
456 456 $ hg ci -m troz
457 457
458 458 Test cloning a treemanifest repo over http.
459 459 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
460 460 $ cat hg.pid >> $DAEMON_PIDS
461 461 $ cd ..
462 462 We can clone even with the knob turned off and we'll get a treemanifest repo.
463 463 $ hg clone --config experimental.treemanifest=False \
464 464 > --config experimental.changegroup3=True \
465 465 > http://localhost:$HGPORT deepclone
466 466 requesting all changes
467 467 adding changesets
468 468 adding manifests
469 469 adding file changes
470 470 added 3 changesets with 10 changes to 8 files
471 471 updating to branch default
472 472 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
473 473 No server errors.
474 474 $ cat deeprepo/errors.log
475 475 requires got updated to include treemanifest
476 476 $ cat deepclone/.hg/requires | grep treemanifest
477 477 treemanifest
478 478 Tree manifest revlogs exist.
479 479 $ find deepclone/.hg/store/meta | sort
480 480 deepclone/.hg/store/meta
481 481 deepclone/.hg/store/meta/a
482 482 deepclone/.hg/store/meta/a/00manifest.i
483 483 deepclone/.hg/store/meta/b
484 484 deepclone/.hg/store/meta/b/00manifest.i
485 485 deepclone/.hg/store/meta/b/bar
486 486 deepclone/.hg/store/meta/b/bar/00manifest.i
487 487 deepclone/.hg/store/meta/b/bar/orange
488 488 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
489 489 deepclone/.hg/store/meta/b/bar/orange/fly
490 490 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
491 491 deepclone/.hg/store/meta/b/foo
492 492 deepclone/.hg/store/meta/b/foo/00manifest.i
493 493 deepclone/.hg/store/meta/b/foo/apple
494 494 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
495 495 deepclone/.hg/store/meta/b/foo/apple/bees
496 496 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
497 497 Verify passes.
498 498 $ cd deepclone
499 499 $ hg verify
500 500 checking changesets
501 501 checking manifests
502 502 crosschecking files in changesets and manifests
503 503 checking files
504 504 8 files, 3 changesets, 10 total revisions
505 505 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now