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