##// END OF EJS Templates
stream-requirements: smoother matching in test-treemanifest.t...
marmoute -
r49493:df6df5dd default
parent child Browse files
Show More
@@ -1,898 +1,896 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 p2
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 214 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
215 215 $ cat hg.pid >> $DAEMON_PIDS
216 216
217 217 Create clone with tree manifests enabled
218 218
219 219 $ cd ..
220 220 $ hg clone --config experimental.treemanifest=1 \
221 221 > http://localhost:$HGPORT repo-mixed -r 1
222 222 adding changesets
223 223 adding manifests
224 224 adding file changes
225 225 added 2 changesets with 14 changes to 11 files
226 226 new changesets 5b02a3e8db7e:581ef6037d8b
227 227 updating to branch default
228 228 11 files updated, 0 files merged, 0 files removed, 0 files unresolved
229 229 $ cd repo-mixed
230 230 $ test -d .hg/store/meta
231 231 [1]
232 232 $ hg debugrequires | grep treemanifest
233 233 treemanifest
234 234
235 235 Should be possible to push updates from flat to tree manifest repo
236 236
237 237 $ hg -R ../repo-flat push ssh://user@dummy/repo-mixed
238 238 pushing to ssh://user@dummy/repo-mixed
239 239 searching for changes
240 240 remote: adding changesets
241 241 remote: adding manifests
242 242 remote: adding file changes
243 243 remote: added 2 changesets with 3 changes to 3 files
244 244
245 245 Commit should store revlog per directory
246 246
247 247 $ hg co 1
248 248 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
249 249 $ echo 3 > a
250 250 $ echo 3 > dir1/a
251 251 $ echo 3 > dir1/dir1/a
252 252 $ hg ci -m 'first tree'
253 253 created new head
254 254 $ find .hg/store/meta | sort
255 255 .hg/store/meta
256 256 .hg/store/meta/dir1
257 257 .hg/store/meta/dir1/00manifest.i
258 258 .hg/store/meta/dir1/dir1
259 259 .hg/store/meta/dir1/dir1/00manifest.i
260 260 .hg/store/meta/dir1/dir2
261 261 .hg/store/meta/dir1/dir2/00manifest.i
262 262 .hg/store/meta/dir2
263 263 .hg/store/meta/dir2/00manifest.i
264 264
265 265 Merge of two trees
266 266
267 267 $ hg co 2
268 268 6 files updated, 0 files merged, 0 files removed, 0 files unresolved
269 269 $ hg merge 1
270 270 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
271 271 (branch merge, don't forget to commit)
272 272 $ hg ci -m 'merge of flat manifests to new tree manifest'
273 273 created new head
274 274 $ hg diff -r 3
275 275
276 276 Parent of tree root manifest should be flat manifest, and two for merge
277 277
278 278 $ hg debugindex -m
279 279 rev linkrev nodeid p1 p2
280 280 0 0 40536115ed9e 000000000000 000000000000
281 281 1 1 f3376063c255 40536115ed9e 000000000000
282 282 2 2 5d9b9da231a2 40536115ed9e 000000000000
283 283 3 3 d17d663cbd8a 5d9b9da231a2 f3376063c255
284 284 4 4 51e32a8c60ee f3376063c255 000000000000
285 285 5 5 cc5baa78b230 5d9b9da231a2 f3376063c255
286 286
287 287
288 288 Status across flat/tree boundary should work
289 289
290 290 $ hg status --rev '.^' --rev .
291 291 M a
292 292 M dir1/a
293 293 M dir1/dir1/a
294 294
295 295
296 296 Turning off treemanifest config has no effect
297 297
298 298 $ hg debugindex --dir dir1
299 299 rev linkrev nodeid p1 p2
300 300 0 4 064927a0648a 000000000000 000000000000
301 301 1 5 25ecb8cb8618 000000000000 000000000000
302 302 $ echo 2 > dir1/a
303 303 $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
304 304 $ hg debugindex --dir dir1
305 305 rev linkrev nodeid p1 p2
306 306 0 4 064927a0648a 000000000000 000000000000
307 307 1 5 25ecb8cb8618 000000000000 000000000000
308 308 2 6 5b16163a30c6 25ecb8cb8618 000000000000
309 309
310 310 Stripping and recovering changes should work
311 311
312 312 $ hg st --change tip
313 313 M dir1/a
314 314 $ hg --config extensions.strip= strip tip
315 315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
316 316 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/51cfd7b1e13b-78a2f3ed-backup.hg
317 317 $ hg debugindex --dir dir1
318 318 rev linkrev nodeid p1 p2
319 319 0 4 064927a0648a 000000000000 000000000000
320 320 1 5 25ecb8cb8618 000000000000 000000000000
321 321
322 322 #if repobundlerepo
323 323 $ hg incoming .hg/strip-backup/*
324 324 comparing with .hg/strip-backup/*-backup.hg (glob)
325 325 searching for changes
326 326 changeset: 6:51cfd7b1e13b
327 327 tag: tip
328 328 user: test
329 329 date: Thu Jan 01 00:00:00 1970 +0000
330 330 summary: modify dir1/a
331 331
332 332 #endif
333 333
334 334 $ hg unbundle .hg/strip-backup/*
335 335 adding changesets
336 336 adding manifests
337 337 adding file changes
338 338 added 1 changesets with 1 changes to 1 files
339 339 new changesets 51cfd7b1e13b (1 drafts)
340 340 (run 'hg update' to get a working copy)
341 341 $ hg --config extensions.strip= strip tip
342 342 saved backup bundle to $TESTTMP/repo-mixed/.hg/strip-backup/*-backup.hg (glob)
343 343 $ hg unbundle -q .hg/strip-backup/*
344 344 $ hg debugindex --dir dir1
345 345 rev linkrev nodeid p1 p2
346 346 0 4 064927a0648a 000000000000 000000000000
347 347 1 5 25ecb8cb8618 000000000000 000000000000
348 348 2 6 5b16163a30c6 25ecb8cb8618 000000000000
349 349 $ hg st --change tip
350 350 M dir1/a
351 351
352 352 Shelving and unshelving should work
353 353
354 354 $ echo foo >> dir1/a
355 355 $ hg shelve
356 356 shelved as default
357 357 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
358 358 $ hg unshelve
359 359 unshelving change 'default'
360 360 $ hg diff --nodates
361 361 diff -r 708a273da119 dir1/a
362 362 --- a/dir1/a
363 363 +++ b/dir1/a
364 364 @@ -1,1 +1,2 @@
365 365 1
366 366 +foo
367 367
368 368 Pushing from treemanifest repo to an empty repo makes that a treemanifest repo
369 369
370 370 $ cd ..
371 371 $ hg init empty-repo
372 372 $ cat << EOF >> empty-repo/.hg/hgrc
373 373 > [experimental]
374 374 > changegroup3=yes
375 375 > EOF
376 376 $ hg debugrequires -R empty-repo | grep treemanifest
377 377 [1]
378 378 $ hg push -R repo -r 0 empty-repo
379 379 pushing to empty-repo
380 380 searching for changes
381 381 adding changesets
382 382 adding manifests
383 383 adding file changes
384 384 added 1 changesets with 2 changes to 2 files
385 385 $ hg debugrequires -R empty-repo | grep treemanifest
386 386 treemanifest
387 387
388 388 Pushing to an empty repo works
389 389
390 390 $ hg --config experimental.treemanifest=1 init clone
391 391 $ hg debugrequires -R clone | grep treemanifest
392 392 treemanifest
393 393 $ hg push -R repo clone
394 394 pushing to clone
395 395 searching for changes
396 396 adding changesets
397 397 adding manifests
398 398 adding file changes
399 399 added 11 changesets with 15 changes to 10 files (+3 heads)
400 400 $ hg debugrequires -R clone | grep treemanifest
401 401 treemanifest
402 402 $ hg -R clone verify
403 403 checking changesets
404 404 checking manifests
405 405 checking directory manifests
406 406 crosschecking files in changesets and manifests
407 407 checking files
408 408 checked 11 changesets with 15 changes to 10 files
409 409
410 410 Create deeper repo with tree manifests.
411 411
412 412 $ hg --config experimental.treemanifest=True init deeprepo
413 413 $ cd deeprepo
414 414
415 415 $ mkdir .A
416 416 $ mkdir b
417 417 $ mkdir b/bar
418 418 $ mkdir b/bar/orange
419 419 $ mkdir b/bar/orange/fly
420 420 $ mkdir b/foo
421 421 $ mkdir b/foo/apple
422 422 $ mkdir b/foo/apple/bees
423 423
424 424 $ touch .A/one.txt
425 425 $ touch .A/two.txt
426 426 $ touch b/bar/fruits.txt
427 427 $ touch b/bar/orange/fly/gnat.py
428 428 $ touch b/bar/orange/fly/housefly.txt
429 429 $ touch b/foo/apple/bees/flower.py
430 430 $ touch c.txt
431 431 $ touch d.py
432 432
433 433 $ hg ci -Aqm 'initial'
434 434
435 435 $ echo >> .A/one.txt
436 436 $ echo >> .A/two.txt
437 437 $ echo >> b/bar/fruits.txt
438 438 $ echo >> b/bar/orange/fly/gnat.py
439 439 $ echo >> b/bar/orange/fly/housefly.txt
440 440 $ echo >> b/foo/apple/bees/flower.py
441 441 $ echo >> c.txt
442 442 $ echo >> d.py
443 443 $ hg ci -Aqm 'second'
444 444
445 445 We'll see that visitdir works by removing some treemanifest revlogs and running
446 446 the files command with various parameters.
447 447
448 448 Test files from the root.
449 449
450 450 $ hg files -r .
451 451 .A/one.txt
452 452 .A/two.txt
453 453 b/bar/fruits.txt
454 454 b/bar/orange/fly/gnat.py
455 455 b/bar/orange/fly/housefly.txt
456 456 b/foo/apple/bees/flower.py
457 457 c.txt
458 458 d.py
459 459
460 460 Excludes with a glob should not exclude everything from the glob's root
461 461
462 462 $ hg files -r . -X 'b/fo?' b
463 463 b/bar/fruits.txt
464 464 b/bar/orange/fly/gnat.py
465 465 b/bar/orange/fly/housefly.txt
466 466 $ cp -R .hg/store .hg/store-copy
467 467
468 468 Test files for a subdirectory.
469 469
470 470 #if reporevlogstore
471 471 $ rm -r .hg/store/meta/~2e_a
472 472 #endif
473 473 #if reposimplestore
474 474 $ rm -r .hg/store/meta/._a
475 475 #endif
476 476 $ hg files -r . b
477 477 b/bar/fruits.txt
478 478 b/bar/orange/fly/gnat.py
479 479 b/bar/orange/fly/housefly.txt
480 480 b/foo/apple/bees/flower.py
481 481 $ hg diff -r '.^' -r . --stat b
482 482 b/bar/fruits.txt | 1 +
483 483 b/bar/orange/fly/gnat.py | 1 +
484 484 b/bar/orange/fly/housefly.txt | 1 +
485 485 b/foo/apple/bees/flower.py | 1 +
486 486 4 files changed, 4 insertions(+), 0 deletions(-)
487 487 $ cp -R .hg/store-copy/. .hg/store
488 488
489 489 Test files with just includes and excludes.
490 490
491 491 #if reporevlogstore
492 492 $ rm -r .hg/store/meta/~2e_a
493 493 #endif
494 494 #if reposimplestore
495 495 $ rm -r .hg/store/meta/._a
496 496 #endif
497 497 $ rm -r .hg/store/meta/b/bar/orange/fly
498 498 $ rm -r .hg/store/meta/b/foo/apple/bees
499 499 $ hg files -r . -I path:b/bar -X path:b/bar/orange/fly -I path:b/foo -X path:b/foo/apple/bees
500 500 b/bar/fruits.txt
501 501 $ 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
502 502 b/bar/fruits.txt | 1 +
503 503 1 files changed, 1 insertions(+), 0 deletions(-)
504 504 $ cp -R .hg/store-copy/. .hg/store
505 505
506 506 Test files for a subdirectory, excluding a directory within it.
507 507
508 508 #if reporevlogstore
509 509 $ rm -r .hg/store/meta/~2e_a
510 510 #endif
511 511 #if reposimplestore
512 512 $ rm -r .hg/store/meta/._a
513 513 #endif
514 514 $ rm -r .hg/store/meta/b/foo
515 515 $ hg files -r . -X path:b/foo b
516 516 b/bar/fruits.txt
517 517 b/bar/orange/fly/gnat.py
518 518 b/bar/orange/fly/housefly.txt
519 519 $ hg diff -r '.^' -r . --stat -X path:b/foo b
520 520 b/bar/fruits.txt | 1 +
521 521 b/bar/orange/fly/gnat.py | 1 +
522 522 b/bar/orange/fly/housefly.txt | 1 +
523 523 3 files changed, 3 insertions(+), 0 deletions(-)
524 524 $ cp -R .hg/store-copy/. .hg/store
525 525
526 526 Test files for a sub directory, including only a directory within it, and
527 527 including an unrelated directory.
528 528
529 529 #if reporevlogstore
530 530 $ rm -r .hg/store/meta/~2e_a
531 531 #endif
532 532 #if reposimplestore
533 533 $ rm -r .hg/store/meta/._a
534 534 #endif
535 535 $ rm -r .hg/store/meta/b/foo
536 536 $ hg files -r . -I path:b/bar/orange -I path:a b
537 537 b/bar/orange/fly/gnat.py
538 538 b/bar/orange/fly/housefly.txt
539 539 $ hg diff -r '.^' -r . --stat -I path:b/bar/orange -I path:a b
540 540 b/bar/orange/fly/gnat.py | 1 +
541 541 b/bar/orange/fly/housefly.txt | 1 +
542 542 2 files changed, 2 insertions(+), 0 deletions(-)
543 543 $ cp -R .hg/store-copy/. .hg/store
544 544
545 545 Test files for a pattern, including a directory, and excluding a directory
546 546 within that.
547 547
548 548 #if reporevlogstore
549 549 $ rm -r .hg/store/meta/~2e_a
550 550 #endif
551 551 #if reposimplestore
552 552 $ rm -r .hg/store/meta/._a
553 553 #endif
554 554 $ rm -r .hg/store/meta/b/foo
555 555 $ rm -r .hg/store/meta/b/bar/orange
556 556 $ hg files -r . glob:**.txt -I path:b/bar -X path:b/bar/orange
557 557 b/bar/fruits.txt
558 558 $ hg diff -r '.^' -r . --stat glob:**.txt -I path:b/bar -X path:b/bar/orange
559 559 b/bar/fruits.txt | 1 +
560 560 1 files changed, 1 insertions(+), 0 deletions(-)
561 561 $ cp -R .hg/store-copy/. .hg/store
562 562
563 563 Add some more changes to the deep repo
564 564 $ echo narf >> b/bar/fruits.txt
565 565 $ hg ci -m narf
566 566 $ echo troz >> b/bar/orange/fly/gnat.py
567 567 $ hg ci -m troz
568 568
569 569 Verify works
570 570 $ hg verify
571 571 checking changesets
572 572 checking manifests
573 573 checking directory manifests
574 574 crosschecking files in changesets and manifests
575 575 checking files
576 576 checked 4 changesets with 18 changes to 8 files
577 577
578 578 #if repofncache
579 579 Dirlogs are included in fncache
580 580 $ grep meta/.A/00manifest.i .hg/store/fncache
581 581 meta/.A/00manifest.i
582 582
583 583 Rebuilt fncache includes dirlogs
584 584 $ rm .hg/store/fncache
585 585 $ hg debugrebuildfncache
586 586 adding data/.A/one.txt.i
587 587 adding data/.A/two.txt.i
588 588 adding data/b/bar/fruits.txt.i
589 589 adding data/b/bar/orange/fly/gnat.py.i
590 590 adding data/b/bar/orange/fly/housefly.txt.i
591 591 adding data/b/foo/apple/bees/flower.py.i
592 592 adding data/c.txt.i
593 593 adding data/d.py.i
594 594 adding meta/.A/00manifest.i
595 595 adding meta/b/00manifest.i
596 596 adding meta/b/bar/00manifest.i
597 597 adding meta/b/bar/orange/00manifest.i
598 598 adding meta/b/bar/orange/fly/00manifest.i
599 599 adding meta/b/foo/00manifest.i
600 600 adding meta/b/foo/apple/00manifest.i
601 601 adding meta/b/foo/apple/bees/00manifest.i
602 602 16 items added, 0 removed from fncache
603 603 #endif
604 604
605 605 Finish first server
606 606 $ killdaemons.py
607 607
608 608 Back up the recently added revlogs
609 609 $ cp -R .hg/store .hg/store-newcopy
610 610
611 611 Verify reports missing dirlog
612 612 $ rm .hg/store/meta/b/00manifest.*
613 613 $ hg verify
614 614 checking changesets
615 615 checking manifests
616 616 checking directory manifests
617 617 0: empty or missing b/
618 618 b/@0: parent-directory manifest refers to unknown revision 67688a370455
619 619 b/@1: parent-directory manifest refers to unknown revision f065da70369e
620 620 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
621 621 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
622 622 warning: orphan data file 'meta/b/bar/00manifest.i' (reporevlogstore !)
623 623 warning: orphan data file 'meta/b/bar/orange/00manifest.i' (reporevlogstore !)
624 624 warning: orphan data file 'meta/b/bar/orange/fly/00manifest.i' (reporevlogstore !)
625 625 warning: orphan data file 'meta/b/foo/00manifest.i' (reporevlogstore !)
626 626 warning: orphan data file 'meta/b/foo/apple/00manifest.i' (reporevlogstore !)
627 627 warning: orphan data file 'meta/b/foo/apple/bees/00manifest.i' (reporevlogstore !)
628 628 crosschecking files in changesets and manifests
629 629 b/bar/fruits.txt@0: in changeset but not in manifest
630 630 b/bar/orange/fly/gnat.py@0: in changeset but not in manifest
631 631 b/bar/orange/fly/housefly.txt@0: in changeset but not in manifest
632 632 b/foo/apple/bees/flower.py@0: in changeset but not in manifest
633 633 checking files
634 634 checked 4 changesets with 18 changes to 8 files
635 635 6 warnings encountered! (reporevlogstore !)
636 636 9 integrity errors encountered!
637 637 (first damaged changeset appears to be 0)
638 638 [1]
639 639 $ cp -R .hg/store-newcopy/. .hg/store
640 640
641 641 Verify reports missing dirlog entry
642 642 $ mv -f .hg/store-copy/meta/b/00manifest.* .hg/store/meta/b/
643 643 $ hg verify
644 644 checking changesets
645 645 checking manifests
646 646 checking directory manifests
647 647 b/@2: parent-directory manifest refers to unknown revision ac0d30948e0b
648 648 b/@3: parent-directory manifest refers to unknown revision 367152e6af28
649 649 b/bar/@?: rev 2 points to unexpected changeset 2
650 650 b/bar/@?: 44d7e1146e0d not in parent-directory manifest
651 651 b/bar/@?: rev 3 points to unexpected changeset 3
652 652 b/bar/@?: 70b10c6b17b7 not in parent-directory manifest
653 653 b/bar/orange/@?: rev 2 points to unexpected changeset 3
654 654 (expected None)
655 655 b/bar/orange/fly/@?: rev 2 points to unexpected changeset 3
656 656 (expected None)
657 657 crosschecking files in changesets and manifests
658 658 checking files
659 659 checked 4 changesets with 18 changes to 8 files
660 660 2 warnings encountered!
661 661 8 integrity errors encountered!
662 662 (first damaged changeset appears to be 2)
663 663 [1]
664 664 $ cp -R .hg/store-newcopy/. .hg/store
665 665
666 666 Test cloning a treemanifest repo over http.
667 667 $ hg serve -p $HGPORT -d --pid-file=hg.pid --errorlog=errors.log
668 668 $ cat hg.pid >> $DAEMON_PIDS
669 669 $ cd ..
670 670 We can clone even with the knob turned off and we'll get a treemanifest repo.
671 671 $ hg clone --config experimental.treemanifest=False \
672 672 > --config experimental.changegroup3=True \
673 673 > http://localhost:$HGPORT deepclone
674 674 requesting all changes
675 675 adding changesets
676 676 adding manifests
677 677 adding file changes
678 678 added 4 changesets with 18 changes to 8 files
679 679 new changesets 775704be6f52:523e5c631710
680 680 updating to branch default
681 681 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
682 682 No server errors.
683 683 $ cat deeprepo/errors.log
684 684 requires got updated to include treemanifest
685 685 $ hg debugrequires -R deepclone | grep treemanifest
686 686 treemanifest
687 687 Tree manifest revlogs exist.
688 688 $ find deepclone/.hg/store/meta | sort
689 689 deepclone/.hg/store/meta
690 690 deepclone/.hg/store/meta/._a (reposimplestore !)
691 691 deepclone/.hg/store/meta/._a/00manifest.i (reposimplestore !)
692 692 deepclone/.hg/store/meta/b
693 693 deepclone/.hg/store/meta/b/00manifest.i
694 694 deepclone/.hg/store/meta/b/bar
695 695 deepclone/.hg/store/meta/b/bar/00manifest.i
696 696 deepclone/.hg/store/meta/b/bar/orange
697 697 deepclone/.hg/store/meta/b/bar/orange/00manifest.i
698 698 deepclone/.hg/store/meta/b/bar/orange/fly
699 699 deepclone/.hg/store/meta/b/bar/orange/fly/00manifest.i
700 700 deepclone/.hg/store/meta/b/foo
701 701 deepclone/.hg/store/meta/b/foo/00manifest.i
702 702 deepclone/.hg/store/meta/b/foo/apple
703 703 deepclone/.hg/store/meta/b/foo/apple/00manifest.i
704 704 deepclone/.hg/store/meta/b/foo/apple/bees
705 705 deepclone/.hg/store/meta/b/foo/apple/bees/00manifest.i
706 706 deepclone/.hg/store/meta/~2e_a (reporevlogstore !)
707 707 deepclone/.hg/store/meta/~2e_a/00manifest.i (reporevlogstore !)
708 708 Verify passes.
709 709 $ cd deepclone
710 710 $ hg verify
711 711 checking changesets
712 712 checking manifests
713 713 checking directory manifests
714 714 crosschecking files in changesets and manifests
715 715 checking files
716 716 checked 4 changesets with 18 changes to 8 files
717 717 $ cd ..
718 718
719 719 #if reporevlogstore
720 720 Create clones using old repo formats to use in later tests
721 721 $ hg clone --config format.usestore=False \
722 722 > --config experimental.changegroup3=True \
723 723 > http://localhost:$HGPORT deeprepo-basicstore
724 724 requesting all changes
725 725 adding changesets
726 726 adding manifests
727 727 adding file changes
728 728 added 4 changesets with 18 changes to 8 files
729 729 new changesets 775704be6f52:523e5c631710
730 730 updating to branch default
731 731 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
732 732 $ cd deeprepo-basicstore
733 733 $ hg debugrequires | grep store
734 734 [1]
735 735 $ hg serve -p $HGPORT1 -d --pid-file=hg.pid --errorlog=errors.log
736 736 $ cat hg.pid >> $DAEMON_PIDS
737 737 $ cd ..
738 738 $ hg clone --config format.usefncache=False \
739 739 > --config experimental.changegroup3=True \
740 740 > http://localhost:$HGPORT deeprepo-encodedstore
741 741 requesting all changes
742 742 adding changesets
743 743 adding manifests
744 744 adding file changes
745 745 added 4 changesets with 18 changes to 8 files
746 746 new changesets 775704be6f52:523e5c631710
747 747 updating to branch default
748 748 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
749 749 $ cd deeprepo-encodedstore
750 750 $ hg debugrequires | grep fncache
751 751 [1]
752 752 $ hg serve -p $HGPORT2 -d --pid-file=hg.pid --errorlog=errors.log
753 753 $ cat hg.pid >> $DAEMON_PIDS
754 754 $ cd ..
755 755
756 756 Local clone with basicstore
757 757 $ hg clone -U deeprepo-basicstore local-clone-basicstore
758 758 $ hg -R local-clone-basicstore verify
759 759 checking changesets
760 760 checking manifests
761 761 checking directory manifests
762 762 crosschecking files in changesets and manifests
763 763 checking files
764 764 checked 4 changesets with 18 changes to 8 files
765 765
766 766 Local clone with encodedstore
767 767 $ hg clone -U deeprepo-encodedstore local-clone-encodedstore
768 768 $ hg -R local-clone-encodedstore verify
769 769 checking changesets
770 770 checking manifests
771 771 checking directory manifests
772 772 crosschecking files in changesets and manifests
773 773 checking files
774 774 checked 4 changesets with 18 changes to 8 files
775 775
776 776 Local clone with fncachestore
777 777 $ hg clone -U deeprepo local-clone-fncachestore
778 778 $ hg -R local-clone-fncachestore verify
779 779 checking changesets
780 780 checking manifests
781 781 checking directory manifests
782 782 crosschecking files in changesets and manifests
783 783 checking files
784 784 checked 4 changesets with 18 changes to 8 files
785 785
786 786 Stream clone with basicstore
787 787 $ hg clone --config experimental.changegroup3=True --stream -U \
788 788 > http://localhost:$HGPORT1 stream-clone-basicstore
789 789 streaming all changes
790 790 28 files to transfer, * of data (glob)
791 791 transferred * in * seconds (*) (glob)
792 792 $ hg -R stream-clone-basicstore verify
793 793 checking changesets
794 794 checking manifests
795 795 checking directory manifests
796 796 crosschecking files in changesets and manifests
797 797 checking files
798 798 checked 4 changesets with 18 changes to 8 files
799 799
800 800 Stream clone with encodedstore
801 801 $ hg clone --config experimental.changegroup3=True --stream -U \
802 802 > http://localhost:$HGPORT2 stream-clone-encodedstore
803 803 streaming all changes
804 804 28 files to transfer, * of data (glob)
805 805 transferred * in * seconds (*) (glob)
806 806 $ hg -R stream-clone-encodedstore verify
807 807 checking changesets
808 808 checking manifests
809 809 checking directory manifests
810 810 crosschecking files in changesets and manifests
811 811 checking files
812 812 checked 4 changesets with 18 changes to 8 files
813 813
814 814 Stream clone with fncachestore
815 815 $ hg clone --config experimental.changegroup3=True --stream -U \
816 816 > http://localhost:$HGPORT stream-clone-fncachestore
817 817 streaming all changes
818 818 22 files to transfer, * of data (glob)
819 819 transferred * in * seconds (*) (glob)
820 820 $ hg -R stream-clone-fncachestore verify
821 821 checking changesets
822 822 checking manifests
823 823 checking directory manifests
824 824 crosschecking files in changesets and manifests
825 825 checking files
826 826 checked 4 changesets with 18 changes to 8 files
827 827
828 828 Packed bundle
829 829 $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
830 830 writing 5330 bytes for 18 files (no-zstd !)
831 831 writing 5400 bytes for 18 files (zstd !)
832 bundle requirements: generaldelta, revlogv1, sparserevlog, treemanifest (no-rust !)
833 bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog, treemanifest (rust !)
832 bundle requirements:.* treemanifest(,.*)? (re)
834 833 $ hg debugbundle --spec repo-packed.hg
835 none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog%2Ctreemanifest (no-rust !)
836 none-packed1;requirements%3Dgeneraldelta%2Cpersistent-nodemap%2Crevlogv1%2Csparserevlog%2Ctreemanifest (rust !)
834 none-packed1;requirements%3D(.*%2C)?treemanifest(%2C.*)? (re)
837 835
838 836 #endif
839 837
840 838 Bundle with changegroup2 is not supported
841 839
842 840 $ hg -R deeprepo bundle --all -t v2 deeprepo.bundle
843 841 abort: repository does not support bundle version 02
844 842 [255]
845 843
846 844 Pull does not include changegroup for manifest the client already has from
847 845 other branch
848 846
849 847 $ mkdir grafted-dir-repo
850 848 $ cd grafted-dir-repo
851 849 $ hg --config experimental.treemanifest=1 init
852 850 $ mkdir dir
853 851 $ echo a > dir/file
854 852 $ echo a > file
855 853 $ hg ci -Am initial
856 854 adding dir/file
857 855 adding file
858 856 $ echo b > dir/file
859 857 $ hg ci -m updated
860 858 $ hg co '.^'
861 859 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
862 860 $ hg revert -r tip dir/
863 861 reverting dir/file
864 862 $ echo b > file # to make sure root manifest is sent
865 863 $ hg ci -m grafted
866 864 created new head
867 865 $ cd ..
868 866
869 867 $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
870 868 > grafted-dir-repo grafted-dir-repo-clone
871 869 adding changesets
872 870 adding manifests
873 871 adding file changes
874 872 added 2 changesets with 3 changes to 2 files
875 873 new changesets d84f4c419457:09ab742f3b0f
876 874 updating to branch default
877 875 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
878 876 $ cd grafted-dir-repo-clone
879 877 $ hg pull -r 2
880 878 pulling from $TESTTMP/grafted-dir-repo
881 879 searching for changes
882 880 adding changesets
883 881 adding manifests
884 882 adding file changes
885 883 added 1 changesets with 1 changes to 1 files (+1 heads)
886 884 new changesets 73699489fb7c
887 885 (run 'hg heads' to see heads, 'hg merge' to merge)
888 886
889 887 Committing a empty commit does not duplicate root treemanifest
890 888 $ echo z >> z
891 889 $ hg commit -Aqm 'pre-empty commit'
892 890 $ hg rm z
893 891 $ hg commit --amend -m 'empty commit'
894 892 saved backup bundle to $TESTTMP/grafted-dir-repo-clone/.hg/strip-backup/cb99d5717cea-9e3b6b02-amend.hg
895 893 $ hg log -r 'tip + tip^' -T '{manifest}\n'
896 894 1:678d3574b88c
897 895 1:678d3574b88c
898 896 $ hg --config extensions.strip= strip -r . -q
General Comments 0
You need to be logged in to leave comments. Login now