##// END OF EJS Templates
test-treemanifest: ensure manifest command isn't broken...
Augie Fackler -
r29699:6943dacc default
parent child Browse files
Show More
@@ -1,795 +1,808 b''
1 1 #require killdaemons
2 2
3 3 $ cat << EOF >> $HGRCPATH
4 4 > [format]
5 5 > usegeneraldelta=yes
6 6 > [ui]
7 7 > ssh=python "$TESTDIR/dummyssh"
8 8 > EOF
9 9
10 10 Set up repo
11 11
12 12 $ hg --config experimental.treemanifest=True init repo
13 13 $ cd repo
14 14
15 15 Requirements get set on init
16 16
17 17 $ grep treemanifest .hg/requires
18 18 treemanifest
19 19
20 20 Without directories, looks like any other repo
21 21
22 22 $ echo 0 > a
23 23 $ echo 0 > b
24 24 $ hg ci -Aqm initial
25 25 $ hg debugdata -m 0
26 26 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
27 27 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
28 28
29 29 Submanifest is stored in separate revlog
30 30
31 31 $ mkdir dir1
32 32 $ echo 1 > dir1/a
33 33 $ echo 1 > dir1/b
34 34 $ echo 1 > e
35 35 $ hg ci -Aqm 'add dir1'
36 36 $ hg debugdata -m 1
37 37 a\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
38 38 b\x00362fef284ce2ca02aecc8de6d5e8a1c3af0556fe (esc)
39 39 dir1\x008b3ffd73f901e83304c83d33132c8e774ceac44et (esc)
40 40 e\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
41 41 $ hg debugdata --dir dir1 0
42 42 a\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
43 43 b\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
44 44
45 45 Can add nested directories
46 46
47 47 $ mkdir dir1/dir1
48 48 $ echo 2 > dir1/dir1/a
49 49 $ echo 2 > dir1/dir1/b
50 50 $ mkdir dir1/dir2
51 51 $ echo 2 > dir1/dir2/a
52 52 $ echo 2 > dir1/dir2/b
53 53 $ hg ci -Aqm 'add dir1/dir1'
54 54 $ hg files -r .
55 55 a
56 56 b
57 57 dir1/a (glob)
58 58 dir1/b (glob)
59 59 dir1/dir1/a (glob)
60 60 dir1/dir1/b (glob)
61 61 dir1/dir2/a (glob)
62 62 dir1/dir2/b (glob)
63 63 e
64 64
65 The manifest command works
66
67 $ hg manifest
68 a
69 b
70 dir1/a
71 dir1/b
72 dir1/dir1/a
73 dir1/dir1/b
74 dir1/dir2/a
75 dir1/dir2/b
76 e
77
65 78 Revision is not created for unchanged directory
66 79
67 80 $ mkdir dir2
68 81 $ echo 3 > dir2/a
69 82 $ hg add dir2
70 83 adding dir2/a (glob)
71 84 $ hg debugindex --dir dir1 > before
72 85 $ hg ci -qm 'add dir2'
73 86 $ hg debugindex --dir dir1 > after
74 87 $ diff before after
75 88 $ rm before after
76 89
77 90 Removing directory does not create an revlog entry
78 91
79 92 $ hg rm dir1/dir1
80 93 removing dir1/dir1/a (glob)
81 94 removing dir1/dir1/b (glob)
82 95 $ hg debugindex --dir dir1/dir1 > before
83 96 $ hg ci -qm 'remove dir1/dir1'
84 97 $ hg debugindex --dir dir1/dir1 > after
85 98 $ diff before after
86 99 $ rm before after
87 100
88 101 Check that hg files (calls treemanifest.walk()) works
89 102 without loading all directory revlogs
90 103
91 104 $ hg co 'desc("add dir2")'
92 105 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
93 106 $ mv .hg/store/meta/dir2 .hg/store/meta/dir2-backup
94 107 $ hg files -r . dir1
95 108 dir1/a (glob)
96 109 dir1/b (glob)
97 110 dir1/dir1/a (glob)
98 111 dir1/dir1/b (glob)
99 112 dir1/dir2/a (glob)
100 113 dir1/dir2/b (glob)
101 114
102 115 Check that status between revisions works (calls treemanifest.matches())
103 116 without loading all directory revlogs
104 117
105 118 $ hg status --rev 'desc("add dir1")' --rev . dir1
106 119 A dir1/dir1/a
107 120 A dir1/dir1/b
108 121 A dir1/dir2/a
109 122 A dir1/dir2/b
110 123 $ mv .hg/store/meta/dir2-backup .hg/store/meta/dir2
111 124
112 125 Merge creates 2-parent revision of directory revlog
113 126
114 127 $ echo 5 > dir1/a
115 128 $ hg ci -Aqm 'modify dir1/a'
116 129 $ hg co '.^'
117 130 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
118 131 $ echo 6 > dir1/b
119 132 $ hg ci -Aqm 'modify dir1/b'
120 133 $ hg merge 'desc("modify dir1/a")'
121 134 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 135 (branch merge, don't forget to commit)
123 136 $ hg ci -m 'conflict-free merge involving dir1/'
124 137 $ cat dir1/a
125 138 5
126 139 $ cat dir1/b
127 140 6
128 141 $ hg debugindex --dir dir1
129 142 rev offset length delta linkrev nodeid p1 p2
130 143 0 0 54 -1 1 8b3ffd73f901 000000000000 000000000000
131 144 1 54 68 0 2 68e9d057c5a8 8b3ffd73f901 000000000000
132 145 2 122 12 1 4 4698198d2624 68e9d057c5a8 000000000000
133 146 3 134 55 1 5 44844058ccce 68e9d057c5a8 000000000000
134 147 4 189 55 1 6 bf3d9b744927 68e9d057c5a8 000000000000
135 148 5 244 55 4 7 dde7c0af2a03 bf3d9b744927 44844058ccce
136 149
137 150 Merge keeping directory from parent 1 does not create revlog entry. (Note that
138 151 dir1's manifest does change, but only because dir1/a's filelog changes.)
139 152
140 153 $ hg co 'desc("add dir2")'
141 154 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
142 155 $ echo 8 > dir2/a
143 156 $ hg ci -m 'modify dir2/a'
144 157 created new head
145 158
146 159 $ hg debugindex --dir dir2 > before
147 160 $ hg merge 'desc("modify dir1/a")'
148 161 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
149 162 (branch merge, don't forget to commit)
150 163 $ hg revert -r 'desc("modify dir2/a")' .
151 164 reverting dir1/a (glob)
152 165 $ hg ci -m 'merge, keeping parent 1'
153 166 $ hg debugindex --dir dir2 > after
154 167 $ diff before after
155 168 $ rm before after
156 169
157 170 Merge keeping directory from parent 2 does not create revlog entry. (Note that
158 171 dir2's manifest does change, but only because dir2/a's filelog changes.)
159 172
160 173 $ hg co 'desc("modify dir2/a")'
161 174 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
162 175 $ hg debugindex --dir dir1 > before
163 176 $ hg merge 'desc("modify dir1/a")'
164 177 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
165 178 (branch merge, don't forget to commit)
166 179 $ hg revert -r 'desc("modify dir1/a")' .
167 180 reverting dir2/a (glob)
168 181 $ hg ci -m 'merge, keeping parent 2'
169 182 created new head
170 183 $ hg debugindex --dir dir1 > after
171 184 $ diff before after
172 185 $ rm before after
173 186
174 187 Create flat source repo for tests with mixed flat/tree manifests
175 188
176 189 $ cd ..
177 190 $ hg init repo-flat
178 191 $ cd repo-flat
179 192
180 193 Create a few commits with flat manifest
181 194
182 195 $ echo 0 > a
183 196 $ echo 0 > b
184 197 $ echo 0 > e
185 198 $ for d in dir1 dir1/dir1 dir1/dir2 dir2
186 199 > do
187 200 > mkdir $d
188 201 > echo 0 > $d/a
189 202 > echo 0 > $d/b
190 203 > done
191 204 $ hg ci -Aqm initial
192 205
193 206 $ echo 1 > a
194 207 $ echo 1 > dir1/a
195 208 $ echo 1 > dir1/dir1/a
196 209 $ hg ci -Aqm 'modify on branch 1'
197 210
198 211 $ hg co 0
199 212 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 213 $ echo 2 > b
201 214 $ echo 2 > dir1/b
202 215 $ echo 2 > dir1/dir1/b
203 216 $ hg ci -Aqm 'modify on branch 2'
204 217
205 218 $ hg merge 1
206 219 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
207 220 (branch merge, don't forget to commit)
208 221 $ hg ci -m 'merge of flat manifests to new flat manifest'
209 222
210 223 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
211 224 $ cat hg.pid >> $DAEMON_PIDS
212 225
213 226 Create clone with tree manifests enabled
214 227
215 228 $ cd ..
216 229 $ hg clone --config experimental.treemanifest=1 \
217 230 > http://localhost:$HGPORT repo-mixed -r 1
218 231 adding changesets
219 232 adding manifests
220 233 adding file changes
221 234 added 2 changesets with 14 changes to 11 files
222 235 updating to branch default
223 236 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
224 237 $ cd repo-mixed
225 238 $ test -d .hg/store/meta
226 239 [1]
227 240 $ grep treemanifest .hg/requires
228 241 treemanifest
229 242
230 243 Should be possible to push updates from flat to tree manifest repo
231 244
232 245 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
233 246 pushing to ssh://user@dummy/repo-mixed
234 247 searching for changes
235 248 remote: adding changesets
236 249 remote: adding manifests
237 250 remote: adding file changes
238 251 remote: added 2 changesets with 3 changes to 3 files
239 252
240 253 Commit should store revlog per directory
241 254
242 255 $ hg co 1
243 256 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
244 257 $ echo 3 > a
245 258 $ echo 3 > dir1/a
246 259 $ echo 3 > dir1/dir1/a
247 260 $ hg ci -m 'first tree'
248 261 created new head
249 262 $ find .hg/store/meta | sort
250 263 .hg/store/meta
251 264 .hg/store/meta/dir1
252 265 .hg/store/meta/dir1/00manifest.i
253 266 .hg/store/meta/dir1/dir1
254 267 .hg/store/meta/dir1/dir1/00manifest.i
255 268 .hg/store/meta/dir1/dir2
256 269 .hg/store/meta/dir1/dir2/00manifest.i
257 270 .hg/store/meta/dir2
258 271 .hg/store/meta/dir2/00manifest.i
259 272
260 273 Merge of two trees
261 274
262 275 $ hg co 2
263 276 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
264 277 $ hg merge 1
265 278 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
266 279 (branch merge, don't forget to commit)
267 280 $ hg ci -m 'merge of flat manifests to new tree manifest'
268 281 created new head
269 282 $ hg diff -r 3
270 283
271 284 Parent of tree root manifest should be flat manifest, and two for merge
272 285
273 286 $ hg debugindex -m
274 287 rev offset length delta linkrev nodeid p1 p2
275 288 0 0 80 -1 0 40536115ed9e 000000000000 000000000000
276 289 1 80 83 0 1 f3376063c255 40536115ed9e 000000000000
277 290 2 163 89 0 2 5d9b9da231a2 40536115ed9e 000000000000
278 291 3 252 83 2 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
279 292 4 335 124 1 4 51e32a8c60ee f3376063c255 000000000000
280 293 5 459 126 2 5 cc5baa78b230 5d9b9da231a2 f3376063c255
281 294
282 295
283 296 Status across flat/tree boundary should work
284 297
285 298 $ hg status --rev '.^' --rev .
286 299 M a
287 300 M dir1/a
288 301 M dir1/dir1/a
289 302
290 303
291 304 Turning off treemanifest config has no effect
292 305
293 306 $ hg debugindex --dir dir1
294 307 rev offset length delta linkrev nodeid p1 p2
295 308 0 0 127 -1 4 064927a0648a 000000000000 000000000000
296 309 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
297 310 $ echo 2 > dir1/a
298 311 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
299 312 $ hg debugindex --dir dir1
300 313 rev offset length delta linkrev nodeid p1 p2
301 314 0 0 127 -1 4 064927a0648a 000000000000 000000000000
302 315 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
303 316 2 238 55 1 6 5b16163a30c6 25ecb8cb8618 000000000000
304 317
305 318 Stripping and recovering changes should work
306 319
307 320 $ hg st --change tip
308 321 M dir1/a
309 322 $ hg --config extensions.strip= strip tip
310 323 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
311 324 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg (glob)
312 325 $ hg debugindex --dir dir1
313 326 rev offset length delta linkrev nodeid p1 p2
314 327 0 0 127 -1 4 064927a0648a 000000000000 000000000000
315 328 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
316 329 $ hg unbundle -q .hg/strip-backup/*
317 330 $ hg debugindex --dir dir1
318 331 rev offset length delta linkrev nodeid p1 p2
319 332 0 0 127 -1 4 064927a0648a 000000000000 000000000000
320 333 1 127 111 0 5 25ecb8cb8618 000000000000 000000000000
321 334 2 238 55 1 6 5b16163a30c6 25ecb8cb8618 000000000000
322 335 $ hg st --change tip
323 336 M dir1/a
324 337
325 338 Shelving and unshelving should work
326 339
327 340 $ echo foo >> dir1/a
328 341 $ hg --config extensions.shelve= shelve
329 342 shelved as default
330 343 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
331 344 $ hg --config extensions.shelve= unshelve
332 345 unshelving change 'default'
333 346 $ hg diff --nodates
334 347 diff -r 708a273da119 dir1/a
335 348 --- a/dir1/a
336 349 +++ b/dir1/a
337 350 @@ -1,1 +1,2 @@
338 351 1
339 352 +foo
340 353
341 354 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
342 355
343 356 $ cd ..
344 357 $ hg init empty-repo
345 358 $ cat << EOF >> empty-repo/.hg/hgrc
346 359 > [experimental]
347 360 > changegroup3=yes
348 361 > EOF
349 362 $ grep treemanifest empty-repo/.hg/requires
350 363 [1]
351 364 $ hg push -R repo -r 0 empty-repo
352 365 pushing to empty-repo
353 366 searching for changes
354 367 adding changesets
355 368 adding manifests
356 369 adding file changes
357 370 added 1 changesets with 2 changes to 2 files
358 371 $ grep treemanifest empty-repo/.hg/requires
359 372 treemanifest
360 373
361 374 Pushing to an empty repo works
362 375
363 376 $ hg --config experimental.treemanifest=1 init clone
364 377 $ grep treemanifest clone/.hg/requires
365 378 treemanifest
366 379 $ hg push -R repo clone
367 380 pushing to clone
368 381 searching for changes
369 382 adding changesets
370 383 adding manifests
371 384 adding file changes
372 385 added 11 changesets with 15 changes to 10 files (+3 heads)
373 386 $ grep treemanifest clone/.hg/requires
374 387 treemanifest
375 388 $ hg -R clone verify
376 389 checking changesets
377 390 checking manifests
378 391 checking directory manifests
379 392 crosschecking files in changesets and manifests
380 393 checking files
381 394 10 files, 11 changesets, 15 total revisions
382 395
383 396 Create deeper repo with tree manifests.
384 397
385 398 $ hg --config experimental.treemanifest=True init deeprepo
386 399 $ cd deeprepo
387 400
388 401 $ mkdir .A
389 402 $ mkdir b
390 403 $ mkdir b/bar
391 404 $ mkdir b/bar/orange
392 405 $ mkdir b/bar/orange/fly
393 406 $ mkdir b/foo
394 407 $ mkdir b/foo/apple
395 408 $ mkdir b/foo/apple/bees
396 409
397 410 $ touch .A/one.txt
398 411 $ touch .A/two.txt
399 412 $ touch b/bar/fruits.txt
400 413 $ touch b/bar/orange/fly/gnat.py
401 414 $ touch b/bar/orange/fly/housefly.txt
402 415 $ touch b/foo/apple/bees/flower.py
403 416 $ touch c.txt
404 417 $ touch d.py
405 418
406 419 $ hg ci -Aqm 'initial'
407 420
408 421 We'll see that visitdir works by removing some treemanifest revlogs and running
409 422 the files command with various parameters.
410 423
411 424 Test files from the root.
412 425
413 426 $ hg files -r .
414 427 .A/one.txt (glob)
415 428 .A/two.txt (glob)
416 429 b/bar/fruits.txt (glob)
417 430 b/bar/orange/fly/gnat.py (glob)
418 431 b/bar/orange/fly/housefly.txt (glob)
419 432 b/foo/apple/bees/flower.py (glob)
420 433 c.txt
421 434 d.py
422 435
423 436 Excludes with a glob should not exclude everything from the glob's root
424 437
425 438 $ hg files -r . -X 'b/fo?' b
426 439 b/bar/fruits.txt (glob)
427 440 b/bar/orange/fly/gnat.py (glob)
428 441 b/bar/orange/fly/housefly.txt (glob)
429 442 $ cp -r .hg/store .hg/store-copy
430 443
431 444 Test files for a subdirectory.
432 445
433 446 $ rm -r .hg/store/meta/~2e_a
434 447 $ hg files -r . b
435 448 b/bar/fruits.txt (glob)
436 449 b/bar/orange/fly/gnat.py (glob)
437 450 b/bar/orange/fly/housefly.txt (glob)
438 451 b/foo/apple/bees/flower.py (glob)
439 452 $ cp -r .hg/store-copy/. .hg/store
440 453
441 454 Test files with just includes and excludes.
442 455
443 456 $ rm -r .hg/store/meta/~2e_a
444 457 $ rm -r .hg/store/meta/b/bar/orange/fly
445 458 $ rm -r .hg/store/meta/b/foo/apple/bees
446 459 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
447 460 b/bar/fruits.txt (glob)
448 461 $ cp -r .hg/store-copy/. .hg/store
449 462
450 463 Test files for a subdirectory, excluding a directory within it.
451 464
452 465 $ rm -r .hg/store/meta/~2e_a
453 466 $ rm -r .hg/store/meta/b/foo
454 467 $ hg files -r . -X path:b/foo b
455 468 b/bar/fruits.txt (glob)
456 469 b/bar/orange/fly/gnat.py (glob)
457 470 b/bar/orange/fly/housefly.txt (glob)
458 471 $ cp -r .hg/store-copy/. .hg/store
459 472
460 473 Test files for a sub directory, including only a directory within it, and
461 474 including an unrelated directory.
462 475
463 476 $ rm -r .hg/store/meta/~2e_a
464 477 $ rm -r .hg/store/meta/b/foo
465 478 $ hg files -r . -I path:b/bar/orange -I path:a b
466 479 b/bar/orange/fly/gnat.py (glob)
467 480 b/bar/orange/fly/housefly.txt (glob)
468 481 $ cp -r .hg/store-copy/. .hg/store
469 482
470 483 Test files for a pattern, including a directory, and excluding a directory
471 484 within that.
472 485
473 486 $ rm -r .hg/store/meta/~2e_a
474 487 $ rm -r .hg/store/meta/b/foo
475 488 $ rm -r .hg/store/meta/b/bar/orange
476 489 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
477 490 b/bar/fruits.txt (glob)
478 491 $ cp -r .hg/store-copy/. .hg/store
479 492
480 493 Add some more changes to the deep repo
481 494 $ echo narf >> b/bar/fruits.txt
482 495 $ hg ci -m narf
483 496 $ echo troz >> b/bar/orange/fly/gnat.py
484 497 $ hg ci -m troz
485 498
486 499 Verify works
487 500 $ hg verify
488 501 checking changesets
489 502 checking manifests
490 503 checking directory manifests
491 504 crosschecking files in changesets and manifests
492 505 checking files
493 506 8 files, 3 changesets, 10 total revisions
494 507
495 508 Dirlogs are included in fncache
496 509 $ grep meta/.A/00manifest.i .hg/store/fncache
497 510 meta/.A/00manifest.i
498 511
499 512 Rebuilt fncache includes dirlogs
500 513 $ rm .hg/store/fncache
501 514 $ hg debugrebuildfncache
502 515 adding data/.A/one.txt.i
503 516 adding data/.A/two.txt.i
504 517 adding data/b/bar/fruits.txt.i
505 518 adding data/b/bar/orange/fly/gnat.py.i
506 519 adding data/b/bar/orange/fly/housefly.txt.i
507 520 adding data/b/foo/apple/bees/flower.py.i
508 521 adding data/c.txt.i
509 522 adding data/d.py.i
510 523 adding meta/.A/00manifest.i
511 524 adding meta/b/00manifest.i
512 525 adding meta/b/bar/00manifest.i
513 526 adding meta/b/bar/orange/00manifest.i
514 527 adding meta/b/bar/orange/fly/00manifest.i
515 528 adding meta/b/foo/00manifest.i
516 529 adding meta/b/foo/apple/00manifest.i
517 530 adding meta/b/foo/apple/bees/00manifest.i
518 531 16 items added, 0 removed from fncache
519 532
520 533 Finish first server
521 534 $ killdaemons.py
522 535
523 536 Back up the recently added revlogs
524 537 $ cp -r .hg/store .hg/store-newcopy
525 538
526 539 Verify reports missing dirlog
527 540 $ rm .hg/store/meta/b/00manifest.*
528 541 $ hg verify
529 542 checking changesets
530 543 checking manifests
531 544 checking directory manifests
532 545 0: empty or missing b/
533 546 b/@0: parent-directory manifest refers to unknown revision 67688a370455
534 547 b/@1: parent-directory manifest refers to unknown revision f38e85d334c5
535 548 b/@2: parent-directory manifest refers to unknown revision 99c9792fd4b0
536 549 warning: orphan revlog 'meta/b/bar/00manifest.i'
537 550 warning: orphan revlog 'meta/b/bar/orange/00manifest.i'
538 551 warning: orphan revlog 'meta/b/bar/orange/fly/00manifest.i'
539 552 warning: orphan revlog 'meta/b/foo/00manifest.i'
540 553 warning: orphan revlog 'meta/b/foo/apple/00manifest.i'
541 554 warning: orphan revlog 'meta/b/foo/apple/bees/00manifest.i'
542 555 crosschecking files in changesets and manifests
543 556 b/bar/fruits.txt@0: in changeset but not in manifest
544 557 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
545 558 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
546 559 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
547 560 checking files
548 561 8 files, 3 changesets, 10 total revisions
549 562 6 warnings encountered!
550 563 8 integrity errors encountered!
551 564 (first damaged changeset appears to be 0)
552 565 [1]
553 566 $ cp -r .hg/store-newcopy/. .hg/store
554 567
555 568 Verify reports missing dirlog entry
556 569 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
557 570 $ hg verify
558 571 checking changesets
559 572 checking manifests
560 573 checking directory manifests
561 574 b/@1: parent-directory manifest refers to unknown revision f38e85d334c5
562 575 b/@2: parent-directory manifest refers to unknown revision 99c9792fd4b0
563 576 b/bar/@?: rev 1 points to unexpected changeset 1
564 577 b/bar/@?: 5e03c4ee5e4a not in parent-directory manifest
565 578 b/bar/@?: rev 2 points to unexpected changeset 2
566 579 b/bar/@?: 1b16940d66d6 not in parent-directory manifest
567 580 b/bar/orange/@?: rev 1 points to unexpected changeset 2
568 581 (expected None)
569 582 b/bar/orange/fly/@?: rev 1 points to unexpected changeset 2
570 583 (expected None)
571 584 crosschecking files in changesets and manifests
572 585 checking files
573 586 8 files, 3 changesets, 10 total revisions
574 587 2 warnings encountered!
575 588 8 integrity errors encountered!
576 589 (first damaged changeset appears to be 1)
577 590 [1]
578 591 $ cp -r .hg/store-newcopy/. .hg/store
579 592
580 593 Test cloning a treemanifest repo over http.
581 594 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
582 595 $ cat hg.pid >> $DAEMON_PIDS
583 596 $ cd ..
584 597 We can clone even with the knob turned off and we'll get a treemanifest repo.
585 598 $ hg clone --config experimental.treemanifest=False \
586 599 > --config experimental.changegroup3=True \
587 600 > http://localhost:$HGPORT deepclone
588 601 requesting all changes
589 602 adding changesets
590 603 adding manifests
591 604 adding file changes
592 605 added 3 changesets with 10 changes to 8 files
593 606 updating to branch default
594 607 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
595 608 No server errors.
596 609 $ cat deeprepo/errors.log
597 610 requires got updated to include treemanifest
598 611 $ cat deepclone/.hg/requires | grep treemanifest
599 612 treemanifest
600 613 Tree manifest revlogs exist.
601 614 $ find deepclone/.hg/store/meta | sort
602 615 deepclone/.hg/store/meta
603 616 deepclone/.hg/store/meta/b
604 617 deepclone/.hg/store/meta/b/00manifest.i
605 618 deepclone/.hg/store/meta/b/bar
606 619 deepclone/.hg/store/meta/b/bar/00manifest.i
607 620 deepclone/.hg/store/meta/b/bar/orange
608 621 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
609 622 deepclone/.hg/store/meta/b/bar/orange/fly
610 623 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
611 624 deepclone/.hg/store/meta/b/foo
612 625 deepclone/.hg/store/meta/b/foo/00manifest.i
613 626 deepclone/.hg/store/meta/b/foo/apple
614 627 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
615 628 deepclone/.hg/store/meta/b/foo/apple/bees
616 629 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
617 630 deepclone/.hg/store/meta/~2e_a
618 631 deepclone/.hg/store/meta/~2e_a/00manifest.i
619 632 Verify passes.
620 633 $ cd deepclone
621 634 $ hg verify
622 635 checking changesets
623 636 checking manifests
624 637 checking directory manifests
625 638 crosschecking files in changesets and manifests
626 639 checking files
627 640 8 files, 3 changesets, 10 total revisions
628 641 $ cd ..
629 642
630 643 Create clones using old repo formats to use in later tests
631 644 $ hg clone --config format.usestore=False \
632 645 > --config experimental.changegroup3=True \
633 646 > http://localhost:$HGPORT deeprepo-basicstore
634 647 requesting all changes
635 648 adding changesets
636 649 adding manifests
637 650 adding file changes
638 651 added 3 changesets with 10 changes to 8 files
639 652 updating to branch default
640 653 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
641 654 $ cd deeprepo-basicstore
642 655 $ grep store .hg/requires
643 656 [1]
644 657 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
645 658 $ cat hg.pid >> $DAEMON_PIDS
646 659 $ cd ..
647 660 $ hg clone --config format.usefncache=False \
648 661 > --config experimental.changegroup3=True \
649 662 > http://localhost:$HGPORT deeprepo-encodedstore
650 663 requesting all changes
651 664 adding changesets
652 665 adding manifests
653 666 adding file changes
654 667 added 3 changesets with 10 changes to 8 files
655 668 updating to branch default
656 669 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
657 670 $ cd deeprepo-encodedstore
658 671 $ grep fncache .hg/requires
659 672 [1]
660 673 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
661 674 $ cat hg.pid >> $DAEMON_PIDS
662 675 $ cd ..
663 676
664 677 Local clone with basicstore
665 678 $ hg clone -U deeprepo-basicstore local-clone-basicstore
666 679 $ hg -R local-clone-basicstore verify
667 680 checking changesets
668 681 checking manifests
669 682 checking directory manifests
670 683 crosschecking files in changesets and manifests
671 684 checking files
672 685 8 files, 3 changesets, 10 total revisions
673 686
674 687 Local clone with encodedstore
675 688 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
676 689 $ hg -R local-clone-encodedstore verify
677 690 checking changesets
678 691 checking manifests
679 692 checking directory manifests
680 693 crosschecking files in changesets and manifests
681 694 checking files
682 695 8 files, 3 changesets, 10 total revisions
683 696
684 697 Local clone with fncachestore
685 698 $ hg clone -U deeprepo local-clone-fncachestore
686 699 $ hg -R local-clone-fncachestore verify
687 700 checking changesets
688 701 checking manifests
689 702 checking directory manifests
690 703 crosschecking files in changesets and manifests
691 704 checking files
692 705 8 files, 3 changesets, 10 total revisions
693 706
694 707 Stream clone with basicstore
695 708 $ hg clone --config experimental.changegroup3=True --uncompressed -U \
696 709 > http://localhost:$HGPORT1 stream-clone-basicstore
697 710 streaming all changes
698 711 18 files to transfer, * of data (glob)
699 712 transferred * in * seconds (*) (glob)
700 713 searching for changes
701 714 no changes found
702 715 $ hg -R stream-clone-basicstore verify
703 716 checking changesets
704 717 checking manifests
705 718 checking directory manifests
706 719 crosschecking files in changesets and manifests
707 720 checking files
708 721 8 files, 3 changesets, 10 total revisions
709 722
710 723 Stream clone with encodedstore
711 724 $ hg clone --config experimental.changegroup3=True --uncompressed -U \
712 725 > http://localhost:$HGPORT2 stream-clone-encodedstore
713 726 streaming all changes
714 727 18 files to transfer, * of data (glob)
715 728 transferred * in * seconds (*) (glob)
716 729 searching for changes
717 730 no changes found
718 731 $ hg -R stream-clone-encodedstore verify
719 732 checking changesets
720 733 checking manifests
721 734 checking directory manifests
722 735 crosschecking files in changesets and manifests
723 736 checking files
724 737 8 files, 3 changesets, 10 total revisions
725 738
726 739 Stream clone with fncachestore
727 740 $ hg clone --config experimental.changegroup3=True --uncompressed -U \
728 741 > http://localhost:$HGPORT stream-clone-fncachestore
729 742 streaming all changes
730 743 18 files to transfer, * of data (glob)
731 744 transferred * in * seconds (*) (glob)
732 745 searching for changes
733 746 no changes found
734 747 $ hg -R stream-clone-fncachestore verify
735 748 checking changesets
736 749 checking manifests
737 750 checking directory manifests
738 751 crosschecking files in changesets and manifests
739 752 checking files
740 753 8 files, 3 changesets, 10 total revisions
741 754
742 755 Packed bundle
743 756 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
744 757 writing 3349 bytes for 18 files
745 758 bundle requirements: generaldelta, revlogv1, treemanifest
746 759 $ hg debugbundle --spec repo-packed.hg
747 760 none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Ctreemanifest
748 761
749 762 Bundle with changegroup2 is not supported
750 763
751 764 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
752 765 abort: repository does not support bundle version 02
753 766 [255]
754 767
755 768 Pull does not include changegroup for manifest the client already has from
756 769 other branch
757 770
758 771 $ mkdir grafted-dir-repo
759 772 $ cd grafted-dir-repo
760 773 $ hg --config experimental.treemanifest=1 init
761 774 $ mkdir dir
762 775 $ echo a > dir/file
763 776 $ echo a > file
764 777 $ hg ci -Am initial
765 778 adding dir/file
766 779 adding file
767 780 $ echo b > dir/file
768 781 $ hg ci -m updated
769 782 $ hg co '.^'
770 783 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
771 784 $ hg revert -r tip dir/
772 785 reverting dir/file (glob)
773 786 $ echo b > file # to make sure root manifest is sent
774 787 $ hg ci -m grafted
775 788 created new head
776 789 $ cd ..
777 790
778 791 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
779 792 > grafted-dir-repo grafted-dir-repo-clone
780 793 adding changesets
781 794 adding manifests
782 795 adding file changes
783 796 added 2 changesets with 3 changes to 2 files
784 797 updating to branch default
785 798 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
786 799 $ cd grafted-dir-repo-clone
787 800 $ hg pull -r 2
788 801 pulling from $TESTTMP/grafted-dir-repo (glob)
789 802 searching for changes
790 803 adding changesets
791 804 adding manifests
792 805 adding file changes
793 806 added 1 changesets with 1 changes to 1 files (+1 heads)
794 807 (run 'hg heads' to see heads, 'hg merge' to merge)
795 808
General Comments 0
You need to be logged in to leave comments. Login now