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