##// END OF EJS Templates
tests: fix windows test failure with largefiles
Mads Kiilerich -
r18557:945ba91c default
parent child Browse files
Show More
@@ -1,2089 +1,2089
1 1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
2 2 $ mkdir "${USERCACHE}"
3 3 $ cat >> $HGRCPATH <<EOF
4 4 > [extensions]
5 5 > largefiles=
6 6 > purge=
7 7 > rebase=
8 8 > transplant=
9 9 > [phases]
10 10 > publish=False
11 11 > [largefiles]
12 12 > minsize=2
13 13 > patterns=glob:**.dat
14 14 > usercache=${USERCACHE}
15 15 > [hooks]
16 16 > precommit=sh -c "echo \\"Invoking status precommit hook\\"; hg status"
17 17 > EOF
18 18
19 19 Create the repo with a couple of revisions of both large and normal
20 20 files.
21 21 Test status and dirstate of largefiles and that summary output is correct.
22 22
23 23 $ hg init a
24 24 $ cd a
25 25 $ mkdir sub
26 26 $ echo normal1 > normal1
27 27 $ echo normal2 > sub/normal2
28 28 $ echo large1 > large1
29 29 $ echo large2 > sub/large2
30 30 $ hg add normal1 sub/normal2
31 31 $ hg add --large large1 sub/large2
32 32 $ hg commit -m "add files"
33 33 Invoking status precommit hook
34 34 A large1
35 35 A normal1
36 36 A sub/large2
37 37 A sub/normal2
38 38 $ touch large1 sub/large2
39 39 $ sleep 1
40 40 $ hg st
41 41 $ hg debugstate --nodates
42 42 n 644 41 .hglf/large1
43 43 n 644 41 .hglf/sub/large2
44 44 n 644 8 normal1
45 45 n 644 8 sub/normal2
46 46 $ hg debugstate --large
47 47 n 644 7 large1
48 48 n 644 7 sub/large2
49 49 $ echo normal11 > normal1
50 50 $ echo normal22 > sub/normal2
51 51 $ echo large11 > large1
52 52 $ echo large22 > sub/large2
53 53 $ hg commit -m "edit files"
54 54 Invoking status precommit hook
55 55 M large1
56 56 M normal1
57 57 M sub/large2
58 58 M sub/normal2
59 59 $ hg sum --large
60 60 parent: 1:ce8896473775 tip
61 61 edit files
62 62 branch: default
63 63 commit: (clean)
64 64 update: (current)
65 65 largefiles: (no remote repo)
66 66
67 67 Commit preserved largefile contents.
68 68
69 69 $ cat normal1
70 70 normal11
71 71 $ cat large1
72 72 large11
73 73 $ cat sub/normal2
74 74 normal22
75 75 $ cat sub/large2
76 76 large22
77 77
78 78 Test status, subdir and unknown files
79 79
80 80 $ echo unknown > sub/unknown
81 81 $ hg st --all
82 82 ? sub/unknown
83 83 C large1
84 84 C normal1
85 85 C sub/large2
86 86 C sub/normal2
87 87 $ hg st --all sub
88 88 ? sub/unknown
89 89 C sub/large2
90 90 C sub/normal2
91 91 $ rm sub/unknown
92 92
93 93 Test messages and exit codes for remove warning cases
94 94
95 95 $ hg remove -A large1
96 96 not removing large1: file still exists
97 97 [1]
98 98 $ echo 'modified' > large1
99 99 $ hg remove large1
100 100 not removing large1: file is modified (use -f to force removal)
101 101 [1]
102 102 $ echo 'new' > normalnew
103 103 $ hg add normalnew
104 104 $ echo 'new' > largenew
105 105 $ hg add --large normalnew
106 106 normalnew already tracked!
107 107 $ hg remove normalnew largenew
108 108 not removing largenew: file is untracked
109 109 not removing normalnew: file has been marked for add (use forget to undo)
110 110 [1]
111 111 $ rm normalnew largenew
112 112 $ hg up -Cq
113 113
114 114 Remove both largefiles and normal files.
115 115
116 116 $ hg remove normal1 large1
117 117 $ hg status large1
118 118 R large1
119 119 $ hg commit -m "remove files"
120 120 Invoking status precommit hook
121 121 R large1
122 122 R normal1
123 123 $ ls
124 124 sub
125 125 $ echo "testlargefile" > large1-test
126 126 $ hg add --large large1-test
127 127 $ hg st
128 128 A large1-test
129 129 $ hg rm large1-test
130 130 not removing large1-test: file has been marked for add (use forget to undo)
131 131 [1]
132 132 $ hg st
133 133 A large1-test
134 134 $ hg forget large1-test
135 135 $ hg st
136 136 ? large1-test
137 137 $ hg remove large1-test
138 138 not removing large1-test: file is untracked
139 139 [1]
140 140 $ hg forget large1-test
141 141 not removing large1-test: file is already untracked
142 142 [1]
143 143 $ rm large1-test
144 144
145 145 Copy both largefiles and normal files (testing that status output is correct).
146 146
147 147 $ hg cp sub/normal2 normal1
148 148 $ hg cp sub/large2 large1
149 149 $ hg commit -m "copy files"
150 150 Invoking status precommit hook
151 151 A large1
152 152 A normal1
153 153 $ cat normal1
154 154 normal22
155 155 $ cat large1
156 156 large22
157 157
158 158 Test moving largefiles and verify that normal files are also unaffected.
159 159
160 160 $ hg mv normal1 normal3
161 161 $ hg mv large1 large3
162 162 $ hg mv sub/normal2 sub/normal4
163 163 $ hg mv sub/large2 sub/large4
164 164 $ hg commit -m "move files"
165 165 Invoking status precommit hook
166 166 A large3
167 167 A normal3
168 168 A sub/large4
169 169 A sub/normal4
170 170 R large1
171 171 R normal1
172 172 R sub/large2
173 173 R sub/normal2
174 174 $ cat normal3
175 175 normal22
176 176 $ cat large3
177 177 large22
178 178 $ cat sub/normal4
179 179 normal22
180 180 $ cat sub/large4
181 181 large22
182 182
183 183 Test copies and moves from a directory other than root (issue3516)
184 184
185 185 $ cd ..
186 186 $ hg init lf_cpmv
187 187 $ cd lf_cpmv
188 188 $ mkdir dira
189 189 $ mkdir dira/dirb
190 190 $ touch dira/dirb/largefile
191 191 $ hg add --large dira/dirb/largefile
192 192 $ hg commit -m "added"
193 193 Invoking status precommit hook
194 194 A dira/dirb/largefile
195 195 $ cd dira
196 196 $ hg cp dirb/largefile foo/largefile
197 197 $ hg ci -m "deep copy"
198 198 Invoking status precommit hook
199 199 A dira/foo/largefile
200 200 $ find . | sort
201 201 .
202 202 ./dirb
203 203 ./dirb/largefile
204 204 ./foo
205 205 ./foo/largefile
206 206 $ hg mv foo/largefile baz/largefile
207 207 $ hg ci -m "moved"
208 208 Invoking status precommit hook
209 209 A dira/baz/largefile
210 210 R dira/foo/largefile
211 211 $ find . | sort
212 212 .
213 213 ./baz
214 214 ./baz/largefile
215 215 ./dirb
216 216 ./dirb/largefile
217 217 ./foo
218 218 $ cd ../../a
219 219
220 220 #if serve
221 221 Test display of largefiles in hgweb
222 222
223 223 $ hg serve -d -p $HGPORT --pid-file ../hg.pid
224 224 $ cat ../hg.pid >> $DAEMON_PIDS
225 225 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/?style=raw'
226 226 200 Script output follows
227 227
228 228
229 229 drwxr-xr-x sub
230 230 -rw-r--r-- 41 large3
231 231 -rw-r--r-- 9 normal3
232 232
233 233
234 234 $ "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT 'file/tip/sub/?style=raw'
235 235 200 Script output follows
236 236
237 237
238 238 -rw-r--r-- 41 large4
239 239 -rw-r--r-- 9 normal4
240 240
241 241
242 242 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
243 243 #endif
244 244
245 245 Test archiving the various revisions. These hit corner cases known with
246 246 archiving.
247 247
248 248 $ hg archive -r 0 ../archive0
249 249 $ hg archive -r 1 ../archive1
250 250 $ hg archive -r 2 ../archive2
251 251 $ hg archive -r 3 ../archive3
252 252 $ hg archive -r 4 ../archive4
253 253 $ cd ../archive0
254 254 $ cat normal1
255 255 normal1
256 256 $ cat large1
257 257 large1
258 258 $ cat sub/normal2
259 259 normal2
260 260 $ cat sub/large2
261 261 large2
262 262 $ cd ../archive1
263 263 $ cat normal1
264 264 normal11
265 265 $ cat large1
266 266 large11
267 267 $ cat sub/normal2
268 268 normal22
269 269 $ cat sub/large2
270 270 large22
271 271 $ cd ../archive2
272 272 $ ls
273 273 sub
274 274 $ cat sub/normal2
275 275 normal22
276 276 $ cat sub/large2
277 277 large22
278 278 $ cd ../archive3
279 279 $ cat normal1
280 280 normal22
281 281 $ cat large1
282 282 large22
283 283 $ cat sub/normal2
284 284 normal22
285 285 $ cat sub/large2
286 286 large22
287 287 $ cd ../archive4
288 288 $ cat normal3
289 289 normal22
290 290 $ cat large3
291 291 large22
292 292 $ cat sub/normal4
293 293 normal22
294 294 $ cat sub/large4
295 295 large22
296 296
297 297 Commit corner case: specify files to commit.
298 298
299 299 $ cd ../a
300 300 $ echo normal3 > normal3
301 301 $ echo large3 > large3
302 302 $ echo normal4 > sub/normal4
303 303 $ echo large4 > sub/large4
304 304 $ hg commit normal3 large3 sub/normal4 sub/large4 -m "edit files again"
305 305 Invoking status precommit hook
306 306 M large3
307 307 M normal3
308 308 M sub/large4
309 309 M sub/normal4
310 310 $ cat normal3
311 311 normal3
312 312 $ cat large3
313 313 large3
314 314 $ cat sub/normal4
315 315 normal4
316 316 $ cat sub/large4
317 317 large4
318 318
319 319 One more commit corner case: commit from a subdirectory.
320 320
321 321 $ cd ../a
322 322 $ echo normal33 > normal3
323 323 $ echo large33 > large3
324 324 $ echo normal44 > sub/normal4
325 325 $ echo large44 > sub/large4
326 326 $ cd sub
327 327 $ hg commit -m "edit files yet again"
328 328 Invoking status precommit hook
329 329 M large3
330 330 M normal3
331 331 M sub/large4
332 332 M sub/normal4
333 333 $ cat ../normal3
334 334 normal33
335 335 $ cat ../large3
336 336 large33
337 337 $ cat normal4
338 338 normal44
339 339 $ cat large4
340 340 large44
341 341
342 342 Committing standins is not allowed.
343 343
344 344 $ cd ..
345 345 $ echo large3 > large3
346 346 $ hg commit .hglf/large3 -m "try to commit standin"
347 347 abort: file ".hglf/large3" is a largefile standin
348 348 (commit the largefile itself instead)
349 349 [255]
350 350
351 351 Corner cases for adding largefiles.
352 352
353 353 $ echo large5 > large5
354 354 $ hg add --large large5
355 355 $ hg add --large large5
356 356 large5 already a largefile
357 357 $ mkdir sub2
358 358 $ echo large6 > sub2/large6
359 359 $ echo large7 > sub2/large7
360 360 $ hg add --large sub2
361 361 adding sub2/large6 as a largefile (glob)
362 362 adding sub2/large7 as a largefile (glob)
363 363 $ hg st
364 364 M large3
365 365 A large5
366 366 A sub2/large6
367 367 A sub2/large7
368 368
369 369 Committing directories containing only largefiles.
370 370
371 371 $ mkdir -p z/y/x/m
372 372 $ touch z/y/x/m/large1
373 373 $ touch z/y/x/large2
374 374 $ hg add --large z/y/x/m/large1 z/y/x/large2
375 375 $ hg commit -m "Subdir with directory only containing largefiles" z
376 376 Invoking status precommit hook
377 377 M large3
378 378 A large5
379 379 A sub2/large6
380 380 A sub2/large7
381 381 A z/y/x/large2
382 382 A z/y/x/m/large1
383 383 $ hg rollback --quiet
384 384 $ touch z/y/x/m/normal
385 385 $ hg add z/y/x/m/normal
386 386 $ hg commit -m "Subdir with mixed contents" z
387 387 Invoking status precommit hook
388 388 M large3
389 389 A large5
390 390 A sub2/large6
391 391 A sub2/large7
392 392 A z/y/x/large2
393 393 A z/y/x/m/large1
394 394 A z/y/x/m/normal
395 395 $ hg st
396 396 M large3
397 397 A large5
398 398 A sub2/large6
399 399 A sub2/large7
400 400 $ hg rollback --quiet
401 401 $ hg revert z/y/x/large2 z/y/x/m/large1
402 402 $ rm z/y/x/large2 z/y/x/m/large1
403 403 $ hg commit -m "Subdir with normal contents" z
404 404 Invoking status precommit hook
405 405 M large3
406 406 A large5
407 407 A sub2/large6
408 408 A sub2/large7
409 409 A z/y/x/m/normal
410 410 $ hg st
411 411 M large3
412 412 A large5
413 413 A sub2/large6
414 414 A sub2/large7
415 415 $ hg rollback --quiet
416 416 $ hg revert --quiet z
417 417 $ hg commit -m "Empty subdir" z
418 418 abort: z: no match under directory!
419 419 [255]
420 420 $ rm -rf z
421 421 $ hg ci -m "standin" .hglf
422 422 abort: file ".hglf" is a largefile standin
423 423 (commit the largefile itself instead)
424 424 [255]
425 425
426 426 Test "hg status" with combination of 'file pattern' and 'directory
427 427 pattern' for largefiles:
428 428
429 429 $ hg status sub2/large6 sub2
430 430 A sub2/large6
431 431 A sub2/large7
432 432
433 433 Config settings (pattern **.dat, minsize 2 MB) are respected.
434 434
435 435 $ echo testdata > test.dat
436 436 $ dd bs=1k count=2k if=/dev/zero of=reallylarge > /dev/null 2> /dev/null
437 437 $ hg add
438 438 adding reallylarge as a largefile
439 439 adding test.dat as a largefile
440 440
441 441 Test that minsize and --lfsize handle float values;
442 442 also tests that --lfsize overrides largefiles.minsize.
443 443 (0.250 MB = 256 kB = 262144 B)
444 444
445 445 $ dd if=/dev/zero of=ratherlarge bs=1024 count=256 > /dev/null 2> /dev/null
446 446 $ dd if=/dev/zero of=medium bs=1024 count=128 > /dev/null 2> /dev/null
447 447 $ hg --config largefiles.minsize=.25 add
448 448 adding ratherlarge as a largefile
449 449 adding medium
450 450 $ hg forget medium
451 451 $ hg --config largefiles.minsize=.25 add --lfsize=.125
452 452 adding medium as a largefile
453 453 $ dd if=/dev/zero of=notlarge bs=1024 count=127 > /dev/null 2> /dev/null
454 454 $ hg --config largefiles.minsize=.25 add --lfsize=.125
455 455 adding notlarge
456 456 $ hg forget notlarge
457 457
458 458 Test forget on largefiles.
459 459
460 460 $ hg forget large3 large5 test.dat reallylarge ratherlarge medium
461 461 $ hg commit -m "add/edit more largefiles"
462 462 Invoking status precommit hook
463 463 A sub2/large6
464 464 A sub2/large7
465 465 R large3
466 466 ? large5
467 467 ? medium
468 468 ? notlarge
469 469 ? ratherlarge
470 470 ? reallylarge
471 471 ? test.dat
472 472 $ hg st
473 473 ? large3
474 474 ? large5
475 475 ? medium
476 476 ? notlarge
477 477 ? ratherlarge
478 478 ? reallylarge
479 479 ? test.dat
480 480
481 481 Purge with largefiles: verify that largefiles are still in the working
482 482 dir after a purge.
483 483
484 484 $ hg purge --all
485 485 $ cat sub/large4
486 486 large44
487 487 $ cat sub2/large6
488 488 large6
489 489 $ cat sub2/large7
490 490 large7
491 491
492 492 Test addremove: verify that files that should be added as largfiles are added as
493 493 such and that already-existing largfiles are not added as normal files by
494 494 accident.
495 495
496 496 $ rm normal3
497 497 $ rm sub/large4
498 498 $ echo "testing addremove with patterns" > testaddremove.dat
499 499 $ echo "normaladdremove" > normaladdremove
500 500 $ hg addremove
501 501 removing sub/large4
502 502 adding testaddremove.dat as a largefile
503 503 removing normal3
504 504 adding normaladdremove
505 505
506 506 Test addremove with -R
507 507
508 508 $ hg up -C
509 509 getting changed largefiles
510 510 1 largefiles updated, 0 removed
511 511 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
512 512 $ rm normal3
513 513 $ rm sub/large4
514 514 $ echo "testing addremove with patterns" > testaddremove.dat
515 515 $ echo "normaladdremove" > normaladdremove
516 516 $ cd ..
517 517 $ hg -R a addremove
518 518 removing sub/large4
519 519 adding a/testaddremove.dat as a largefile (glob)
520 520 removing normal3
521 521 adding normaladdremove
522 522 $ cd a
523 523
524 524 Test 3364
525 525 $ hg clone . ../addrm
526 526 updating to branch default
527 527 getting changed largefiles
528 528 3 largefiles updated, 0 removed
529 529 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 530 $ cd ../addrm
531 531 $ cat >> .hg/hgrc <<EOF
532 532 > [hooks]
533 533 > post-commit.stat=sh -c "echo \\"Invoking status postcommit hook\\"; hg status -A"
534 534 > EOF
535 535 $ touch foo
536 536 $ hg add --large foo
537 537 $ hg ci -m "add foo"
538 538 Invoking status precommit hook
539 539 A foo
540 540 Invoking status postcommit hook
541 541 C foo
542 542 C normal3
543 543 C sub/large4
544 544 C sub/normal4
545 545 C sub2/large6
546 546 C sub2/large7
547 547 $ rm foo
548 548 $ hg st
549 549 ! foo
550 550 hmm.. no precommit invoked, but there is a postcommit??
551 551 $ hg ci -m "will not checkin"
552 552 nothing changed
553 553 Invoking status postcommit hook
554 554 ! foo
555 555 C normal3
556 556 C sub/large4
557 557 C sub/normal4
558 558 C sub2/large6
559 559 C sub2/large7
560 560 [1]
561 561 $ hg addremove
562 562 removing foo
563 563 $ hg st
564 564 R foo
565 565 $ hg ci -m "used to say nothing changed"
566 566 Invoking status precommit hook
567 567 R foo
568 568 Invoking status postcommit hook
569 569 C normal3
570 570 C sub/large4
571 571 C sub/normal4
572 572 C sub2/large6
573 573 C sub2/large7
574 574 $ hg st
575 575
576 576 Test 3507 (both normal files and largefiles were a problem)
577 577
578 578 $ touch normal
579 579 $ touch large
580 580 $ hg add normal
581 581 $ hg add --large large
582 582 $ hg ci -m "added"
583 583 Invoking status precommit hook
584 584 A large
585 585 A normal
586 586 Invoking status postcommit hook
587 587 C large
588 588 C normal
589 589 C normal3
590 590 C sub/large4
591 591 C sub/normal4
592 592 C sub2/large6
593 593 C sub2/large7
594 594 $ hg remove normal
595 595 $ hg addremove --traceback
596 596 $ hg ci -m "addremoved normal"
597 597 Invoking status precommit hook
598 598 R normal
599 599 Invoking status postcommit hook
600 600 C large
601 601 C normal3
602 602 C sub/large4
603 603 C sub/normal4
604 604 C sub2/large6
605 605 C sub2/large7
606 606 $ hg up -C '.^'
607 607 getting changed largefiles
608 608 0 largefiles updated, 0 removed
609 609 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
610 610 $ hg remove large
611 611 $ hg addremove --traceback
612 612 $ hg ci -m "removed large"
613 613 Invoking status precommit hook
614 614 R large
615 615 created new head
616 616 Invoking status postcommit hook
617 617 C normal
618 618 C normal3
619 619 C sub/large4
620 620 C sub/normal4
621 621 C sub2/large6
622 622 C sub2/large7
623 623
624 624 Test commit -A (issue 3542)
625 625 $ echo large8 > large8
626 626 $ hg add --large large8
627 627 $ hg ci -Am 'this used to add large8 as normal and commit both'
628 628 Invoking status precommit hook
629 629 A large8
630 630 Invoking status postcommit hook
631 631 C large8
632 632 C normal
633 633 C normal3
634 634 C sub/large4
635 635 C sub/normal4
636 636 C sub2/large6
637 637 C sub2/large7
638 638 $ rm large8
639 639 $ hg ci -Am 'this used to not notice the rm'
640 640 removing large8
641 641 Invoking status precommit hook
642 642 R large8
643 643 Invoking status postcommit hook
644 644 C normal
645 645 C normal3
646 646 C sub/large4
647 647 C sub/normal4
648 648 C sub2/large6
649 649 C sub2/large7
650 650
651 651 Test that a standin can't be added as a large file
652 652
653 653 $ touch large
654 654 $ hg add --large large
655 655 $ hg ci -m "add"
656 656 Invoking status precommit hook
657 657 A large
658 658 Invoking status postcommit hook
659 659 C large
660 660 C normal
661 661 C normal3
662 662 C sub/large4
663 663 C sub/normal4
664 664 C sub2/large6
665 665 C sub2/large7
666 666 $ hg remove large
667 667 $ touch large
668 668 $ hg addremove --config largefiles.patterns=**large --traceback
669 669 adding large as a largefile
670 670
671 671 Test that outgoing --large works (with revsets too)
672 672 $ hg outgoing --rev '.^' --large
673 673 comparing with $TESTTMP/a (glob)
674 674 searching for changes
675 675 changeset: 8:c02fd3b77ec4
676 676 user: test
677 677 date: Thu Jan 01 00:00:00 1970 +0000
678 678 summary: add foo
679 679
680 680 changeset: 9:289dd08c9bbb
681 681 user: test
682 682 date: Thu Jan 01 00:00:00 1970 +0000
683 683 summary: used to say nothing changed
684 684
685 685 changeset: 10:34f23ac6ac12
686 686 user: test
687 687 date: Thu Jan 01 00:00:00 1970 +0000
688 688 summary: added
689 689
690 690 changeset: 12:710c1b2f523c
691 691 parent: 10:34f23ac6ac12
692 692 user: test
693 693 date: Thu Jan 01 00:00:00 1970 +0000
694 694 summary: removed large
695 695
696 696 changeset: 13:0a3e75774479
697 697 user: test
698 698 date: Thu Jan 01 00:00:00 1970 +0000
699 699 summary: this used to add large8 as normal and commit both
700 700
701 701 changeset: 14:84f3d378175c
702 702 user: test
703 703 date: Thu Jan 01 00:00:00 1970 +0000
704 704 summary: this used to not notice the rm
705 705
706 706 searching for changes
707 707 largefiles to upload:
708 708 foo
709 709 large
710 710 large8
711 711
712 712 $ cd ../a
713 713
714 714 Clone a largefiles repo.
715 715
716 716 $ hg clone . ../b
717 717 updating to branch default
718 718 getting changed largefiles
719 719 3 largefiles updated, 0 removed
720 720 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
721 721 $ cd ../b
722 722 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
723 723 7:daea875e9014 add/edit more largefiles
724 724 6:4355d653f84f edit files yet again
725 725 5:9d5af5072dbd edit files again
726 726 4:74c02385b94c move files
727 727 3:9e8fbc4bce62 copy files
728 728 2:51a0ae4d5864 remove files
729 729 1:ce8896473775 edit files
730 730 0:30d30fe6a5be add files
731 731 $ cat normal3
732 732 normal33
733 733 $ cat sub/normal4
734 734 normal44
735 735 $ cat sub/large4
736 736 large44
737 737 $ cat sub2/large6
738 738 large6
739 739 $ cat sub2/large7
740 740 large7
741 741 $ cd ..
742 742 $ hg clone a -r 3 c
743 743 adding changesets
744 744 adding manifests
745 745 adding file changes
746 746 added 4 changesets with 10 changes to 4 files
747 747 updating to branch default
748 748 getting changed largefiles
749 749 2 largefiles updated, 0 removed
750 750 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
751 751 $ cd c
752 752 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
753 753 3:9e8fbc4bce62 copy files
754 754 2:51a0ae4d5864 remove files
755 755 1:ce8896473775 edit files
756 756 0:30d30fe6a5be add files
757 757 $ cat normal1
758 758 normal22
759 759 $ cat large1
760 760 large22
761 761 $ cat sub/normal2
762 762 normal22
763 763 $ cat sub/large2
764 764 large22
765 765
766 766 Old revisions of a clone have correct largefiles content (this also
767 767 tests update).
768 768
769 769 $ hg update -r 1
770 770 getting changed largefiles
771 771 1 largefiles updated, 0 removed
772 772 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
773 773 $ cat large1
774 774 large11
775 775 $ cat sub/large2
776 776 large22
777 777 $ cd ..
778 778
779 779 Test cloning with --all-largefiles flag
780 780
781 781 $ rm "${USERCACHE}"/*
782 782 $ hg clone --all-largefiles a a-backup
783 783 updating to branch default
784 784 getting changed largefiles
785 785 3 largefiles updated, 0 removed
786 786 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
787 787 8 additional largefiles cached
788 788
789 789 $ rm "${USERCACHE}"/*
790 790 $ hg clone --all-largefiles -u 0 a a-clone0
791 791 updating to branch default
792 792 getting changed largefiles
793 793 2 largefiles updated, 0 removed
794 794 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
795 795 9 additional largefiles cached
796 796 $ hg -R a-clone0 sum
797 797 parent: 0:30d30fe6a5be
798 798 add files
799 799 branch: default
800 800 commit: (clean)
801 801 update: 7 new changesets (update)
802 802
803 803 $ rm "${USERCACHE}"/*
804 804 $ hg clone --all-largefiles -u 1 a a-clone1
805 805 updating to branch default
806 806 getting changed largefiles
807 807 2 largefiles updated, 0 removed
808 808 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
809 809 8 additional largefiles cached
810 810 $ hg -R a-clone1 verify --large --lfa --lfc
811 811 checking changesets
812 812 checking manifests
813 813 crosschecking files in changesets and manifests
814 814 checking files
815 815 10 files, 8 changesets, 24 total revisions
816 816 searching 8 changesets for largefiles
817 817 verified contents of 13 revisions of 6 largefiles
818 818 $ hg -R a-clone1 sum
819 819 parent: 1:ce8896473775
820 820 edit files
821 821 branch: default
822 822 commit: (clean)
823 823 update: 6 new changesets (update)
824 824
825 825 $ rm "${USERCACHE}"/*
826 826 $ hg clone --all-largefiles -U a a-clone-u
827 827 11 additional largefiles cached
828 828 $ hg -R a-clone-u sum
829 829 parent: -1:000000000000 (no revision checked out)
830 830 branch: default
831 831 commit: (clean)
832 832 update: 8 new changesets (update)
833 833
834 834 Show computed destination directory:
835 835
836 836 $ mkdir xyz
837 837 $ cd xyz
838 838 $ hg clone ../a
839 839 destination directory: a
840 840 updating to branch default
841 841 getting changed largefiles
842 842 3 largefiles updated, 0 removed
843 843 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
844 844 $ cd ..
845 845
846 846 Clone URL without path:
847 847
848 848 $ hg clone file://
849 849 abort: repository / not found!
850 850 [255]
851 851
852 852 Ensure base clone command argument validation
853 853
854 854 $ hg clone -U -u 0 a a-clone-failure
855 855 abort: cannot specify both --noupdate and --updaterev
856 856 [255]
857 857
858 858 $ hg clone --all-largefiles a ssh://localhost/a
859 859 abort: --all-largefiles is incompatible with non-local destination ssh://localhost/a
860 860 [255]
861 861
862 862 Test pulling with --all-largefiles flag. Also test that the largefiles are
863 863 downloaded from 'default' instead of 'default-push' when no source is specified
864 864 (issue3584)
865 865
866 866 $ rm -Rf a-backup
867 867 $ hg clone -r 1 a a-backup
868 868 adding changesets
869 869 adding manifests
870 870 adding file changes
871 871 added 2 changesets with 8 changes to 4 files
872 872 updating to branch default
873 873 getting changed largefiles
874 874 2 largefiles updated, 0 removed
875 875 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
876 876 $ rm "${USERCACHE}"/*
877 877 $ cd a-backup
878 878 $ hg pull --all-largefiles --config paths.default-push=bogus/path
879 879 pulling from $TESTTMP/a (glob)
880 880 searching for changes
881 881 adding changesets
882 882 adding manifests
883 883 adding file changes
884 884 added 6 changesets with 16 changes to 8 files
885 885 (run 'hg update' to get a working copy)
886 886 caching new largefiles
887 887 3 largefiles cached
888 888 3 additional largefiles cached
889 889 $ cd ..
890 890
891 891 Rebasing between two repositories does not revert largefiles to old
892 892 revisions (this was a very bad bug that took a lot of work to fix).
893 893
894 894 $ hg clone a d
895 895 updating to branch default
896 896 getting changed largefiles
897 897 3 largefiles updated, 0 removed
898 898 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
899 899 $ cd b
900 900 $ echo large4-modified > sub/large4
901 901 $ echo normal3-modified > normal3
902 902 $ hg commit -m "modify normal file and largefile in repo b"
903 903 Invoking status precommit hook
904 904 M normal3
905 905 M sub/large4
906 906 $ cd ../d
907 907 $ echo large6-modified > sub2/large6
908 908 $ echo normal4-modified > sub/normal4
909 909 $ hg commit -m "modify normal file largefile in repo d"
910 910 Invoking status precommit hook
911 911 M sub/normal4
912 912 M sub2/large6
913 913 $ cd ..
914 914 $ hg clone d e
915 915 updating to branch default
916 916 getting changed largefiles
917 917 3 largefiles updated, 0 removed
918 918 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
919 919 $ cd d
920 920
921 921 More rebase testing, but also test that the largefiles are downloaded from
922 922 'default' instead of 'default-push' when no source is specified (issue3584).
923 923 The error messages go away if repo 'b' is created with --all-largefiles.
924 924 $ hg pull --rebase --all-largefiles --config paths.default-push=bogus/path --config paths.default=../b
925 925 pulling from $TESTTMP/b (glob)
926 926 searching for changes
927 927 adding changesets
928 928 adding manifests
929 929 adding file changes
930 930 added 1 changesets with 2 changes to 2 files (+1 heads)
931 931 Invoking status precommit hook
932 932 M sub/normal4
933 933 M sub2/large6
934 934 saved backup bundle to $TESTTMP/d/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
935 935 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large3: can't get file locally (glob)
936 936 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large4: can't get file locally (glob)
937 937 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
938 938 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
939 939 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
940 940 error getting id 5f78770c0e77ba4287ad6ef3071c9bf9c379742f from url file:$TESTTMP/b for file large1: can't get file locally (glob)
941 941 error getting id eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
942 942 error getting id 4669e532d5b2c093a78eca010077e708a071bb64 from url file:$TESTTMP/b for file large1: can't get file locally (glob)
943 943 error getting id 1deebade43c8c498a3c8daddac0244dc55d1331d from url file:$TESTTMP/b for file sub/large2: can't get file locally (glob)
944 944 0 additional largefiles cached
945 945 9 largefiles failed to download
946 946 nothing to rebase
947 947 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
948 948 9:598410d3eb9a modify normal file largefile in repo d
949 949 8:a381d2c8c80e modify normal file and largefile in repo b
950 950 7:daea875e9014 add/edit more largefiles
951 951 6:4355d653f84f edit files yet again
952 952 5:9d5af5072dbd edit files again
953 953 4:74c02385b94c move files
954 954 3:9e8fbc4bce62 copy files
955 955 2:51a0ae4d5864 remove files
956 956 1:ce8896473775 edit files
957 957 0:30d30fe6a5be add files
958 958 $ cat normal3
959 959 normal3-modified
960 960 $ cat sub/normal4
961 961 normal4-modified
962 962 $ cat sub/large4
963 963 large4-modified
964 964 $ cat sub2/large6
965 965 large6-modified
966 966 $ cat sub2/large7
967 967 large7
968 968 $ cd ../e
969 969 $ hg pull ../b
970 970 pulling from ../b
971 971 searching for changes
972 972 adding changesets
973 973 adding manifests
974 974 adding file changes
975 975 added 1 changesets with 2 changes to 2 files (+1 heads)
976 976 (run 'hg heads' to see heads, 'hg merge' to merge)
977 977 caching new largefiles
978 978 0 largefiles cached
979 979 $ hg rebase
980 980 Invoking status precommit hook
981 981 M sub/normal4
982 982 M sub2/large6
983 983 saved backup bundle to $TESTTMP/e/.hg/strip-backup/f574fb32bb45-backup.hg (glob)
984 984 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
985 985 9:598410d3eb9a modify normal file largefile in repo d
986 986 8:a381d2c8c80e modify normal file and largefile in repo b
987 987 7:daea875e9014 add/edit more largefiles
988 988 6:4355d653f84f edit files yet again
989 989 5:9d5af5072dbd edit files again
990 990 4:74c02385b94c move files
991 991 3:9e8fbc4bce62 copy files
992 992 2:51a0ae4d5864 remove files
993 993 1:ce8896473775 edit files
994 994 0:30d30fe6a5be add files
995 995 $ cat normal3
996 996 normal3-modified
997 997 $ cat sub/normal4
998 998 normal4-modified
999 999 $ cat sub/large4
1000 1000 large4-modified
1001 1001 $ cat sub2/large6
1002 1002 large6-modified
1003 1003 $ cat sub2/large7
1004 1004 large7
1005 1005
1006 1006 Log on largefiles
1007 1007
1008 1008 - same output
1009 1009 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub/large4
1010 1010 8:a381d2c8c80e modify normal file and largefile in repo b
1011 1011 6:4355d653f84f edit files yet again
1012 1012 5:9d5af5072dbd edit files again
1013 1013 4:74c02385b94c move files
1014 1014 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub/large4
1015 1015 8:a381d2c8c80e modify normal file and largefile in repo b
1016 1016 6:4355d653f84f edit files yet again
1017 1017 5:9d5af5072dbd edit files again
1018 1018 4:74c02385b94c move files
1019 1019
1020 1020 - .hglf only matches largefiles, without .hglf it matches 9 bco sub/normal
1021 1021 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' .hglf/sub
1022 1022 8:a381d2c8c80e modify normal file and largefile in repo b
1023 1023 6:4355d653f84f edit files yet again
1024 1024 5:9d5af5072dbd edit files again
1025 1025 4:74c02385b94c move files
1026 1026 1:ce8896473775 edit files
1027 1027 0:30d30fe6a5be add files
1028 1028 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' sub
1029 1029 9:598410d3eb9a modify normal file largefile in repo d
1030 1030 8:a381d2c8c80e modify normal file and largefile in repo b
1031 1031 6:4355d653f84f edit files yet again
1032 1032 5:9d5af5072dbd edit files again
1033 1033 4:74c02385b94c move files
1034 1034 1:ce8896473775 edit files
1035 1035 0:30d30fe6a5be add files
1036 1036
1037 1037 - globbing gives same result
1038 1038 $ hg log --template '{rev}:{node|short} {desc|firstline}\n' 'glob:sub/*'
1039 1039 9:598410d3eb9a modify normal file largefile in repo d
1040 1040 8:a381d2c8c80e modify normal file and largefile in repo b
1041 1041 6:4355d653f84f edit files yet again
1042 1042 5:9d5af5072dbd edit files again
1043 1043 4:74c02385b94c move files
1044 1044 1:ce8896473775 edit files
1045 1045 0:30d30fe6a5be add files
1046 1046
1047 1047 Rollback on largefiles.
1048 1048
1049 1049 $ echo large4-modified-again > sub/large4
1050 1050 $ hg commit -m "Modify large4 again"
1051 1051 Invoking status precommit hook
1052 1052 M sub/large4
1053 1053 $ hg rollback
1054 1054 repository tip rolled back to revision 9 (undo commit)
1055 1055 working directory now based on revision 9
1056 1056 $ hg st
1057 1057 M sub/large4
1058 1058 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1059 1059 9:598410d3eb9a modify normal file largefile in repo d
1060 1060 8:a381d2c8c80e modify normal file and largefile in repo b
1061 1061 7:daea875e9014 add/edit more largefiles
1062 1062 6:4355d653f84f edit files yet again
1063 1063 5:9d5af5072dbd edit files again
1064 1064 4:74c02385b94c move files
1065 1065 3:9e8fbc4bce62 copy files
1066 1066 2:51a0ae4d5864 remove files
1067 1067 1:ce8896473775 edit files
1068 1068 0:30d30fe6a5be add files
1069 1069 $ cat sub/large4
1070 1070 large4-modified-again
1071 1071
1072 1072 "update --check" refuses to update with uncommitted changes.
1073 1073 $ hg update --check 8
1074 1074 abort: uncommitted local changes
1075 1075 [255]
1076 1076
1077 1077 "update --clean" leaves correct largefiles in working copy, even when there is
1078 1078 .orig files from revert in .hglf.
1079 1079
1080 1080 $ echo mistake > sub2/large7
1081 1081 $ hg revert sub2/large7
1082 1082 $ hg -q update --clean -r null
1083 1083 $ hg update --clean
1084 1084 getting changed largefiles
1085 1085 3 largefiles updated, 0 removed
1086 1086 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1087 1087 $ cat normal3
1088 1088 normal3-modified
1089 1089 $ cat sub/normal4
1090 1090 normal4-modified
1091 1091 $ cat sub/large4
1092 1092 large4-modified
1093 1093 $ cat sub2/large6
1094 1094 large6-modified
1095 1095 $ cat sub2/large7
1096 1096 large7
1097 1097 $ cat sub2/large7.orig
1098 1098 mistake
1099 1099 $ cat .hglf/sub2/large7.orig
1100 1100 9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
1101 1101
1102 1102 demonstrate misfeature: .orig file is overwritten on every update -C,
1103 1103 also when clean:
1104 1104 $ hg update --clean
1105 1105 getting changed largefiles
1106 1106 0 largefiles updated, 0 removed
1107 1107 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1108 1108 $ cat sub2/large7.orig
1109 1109 large7
1110 1110 $ rm sub2/large7.orig .hglf/sub2/large7.orig
1111 1111
1112 1112 Now "update check" is happy.
1113 1113 $ hg update --check 8
1114 1114 getting changed largefiles
1115 1115 1 largefiles updated, 0 removed
1116 1116 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1117 1117 $ hg update --check
1118 1118 getting changed largefiles
1119 1119 1 largefiles updated, 0 removed
1120 1120 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1121 1121
1122 1122 Test removing empty largefiles directories on update
1123 1123 $ test -d sub2 && echo "sub2 exists"
1124 1124 sub2 exists
1125 1125 $ hg update -q null
1126 1126 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1127 1127 [1]
1128 1128 $ hg update -q
1129 1129
1130 1130 Test hg remove removes empty largefiles directories
1131 1131 $ test -d sub2 && echo "sub2 exists"
1132 1132 sub2 exists
1133 1133 $ hg remove sub2/*
1134 1134 $ test -d sub2 && echo "error: sub2 should not exist anymore"
1135 1135 [1]
1136 1136 $ hg revert sub2/large6 sub2/large7
1137 1137
1138 1138 "revert" works on largefiles (and normal files too).
1139 1139 $ echo hack3 >> normal3
1140 1140 $ echo hack4 >> sub/normal4
1141 1141 $ echo hack4 >> sub/large4
1142 1142 $ rm sub2/large6
1143 1143 $ hg revert sub2/large6
1144 1144 $ hg rm sub2/large6
1145 1145 $ echo new >> sub2/large8
1146 1146 $ hg add --large sub2/large8
1147 1147 # XXX we don't really want to report that we're reverting the standin;
1148 1148 # that's just an implementation detail. But I don't see an obvious fix. ;-(
1149 1149 $ hg revert sub
1150 1150 reverting .hglf/sub/large4 (glob)
1151 1151 reverting sub/normal4 (glob)
1152 1152 $ hg status
1153 1153 M normal3
1154 1154 A sub2/large8
1155 1155 R sub2/large6
1156 1156 ? sub/large4.orig
1157 1157 ? sub/normal4.orig
1158 1158 $ cat sub/normal4
1159 1159 normal4-modified
1160 1160 $ cat sub/large4
1161 1161 large4-modified
1162 1162 $ hg revert -a --no-backup
1163 1163 undeleting .hglf/sub2/large6 (glob)
1164 1164 forgetting .hglf/sub2/large8 (glob)
1165 1165 reverting normal3
1166 1166 $ hg status
1167 1167 ? sub/large4.orig
1168 1168 ? sub/normal4.orig
1169 1169 ? sub2/large8
1170 1170 $ cat normal3
1171 1171 normal3-modified
1172 1172 $ cat sub2/large6
1173 1173 large6-modified
1174 1174 $ rm sub/*.orig sub2/large8
1175 1175
1176 1176 revert some files to an older revision
1177 1177 $ hg revert --no-backup -r 8 sub2
1178 1178 reverting .hglf/sub2/large6 (glob)
1179 1179 $ cat sub2/large6
1180 1180 large6
1181 1181 $ hg revert --no-backup -C -r '.^' sub2
1182 1182 reverting .hglf/sub2/large6 (glob)
1183 1183 $ hg revert --no-backup sub2
1184 1184 reverting .hglf/sub2/large6 (glob)
1185 1185 $ hg status
1186 1186
1187 1187 "verify --large" actually verifies largefiles
1188 1188
1189 1189 - Where Do We Come From? What Are We? Where Are We Going?
1190 1190 $ pwd
1191 1191 $TESTTMP/e
1192 1192 $ hg paths
1193 1193 default = $TESTTMP/d (glob)
1194 1194
1195 1195 $ hg verify --large
1196 1196 checking changesets
1197 1197 checking manifests
1198 1198 crosschecking files in changesets and manifests
1199 1199 checking files
1200 1200 10 files, 10 changesets, 28 total revisions
1201 1201 searching 1 changesets for largefiles
1202 1202 verified existence of 3 revisions of 3 largefiles
1203 1203
1204 1204 - introduce missing blob in local store repo and make sure that this is caught:
1205 1205 $ mv $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 .
1206 1206 $ hg verify --large
1207 1207 checking changesets
1208 1208 checking manifests
1209 1209 crosschecking files in changesets and manifests
1210 1210 checking files
1211 1211 10 files, 10 changesets, 28 total revisions
1212 1212 searching 1 changesets for largefiles
1213 changeset 9:598410d3eb9a: sub/large4 references missing $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1213 changeset 9:598410d3eb9a: sub/large4 references missing $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 (glob)
1214 1214 verified existence of 3 revisions of 3 largefiles
1215 1215 [1]
1216 1216
1217 1217 - introduce corruption and make sure that it is caught when checking content:
1218 1218 $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1219 1219 $ hg verify -q --large --lfc
1220 changeset 9:598410d3eb9a: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
1220 changeset 9:598410d3eb9a: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 (glob)
1221 1221 [1]
1222 1222
1223 1223 - cleanup
1224 1224 $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
1225 1225
1226 1226 - verifying all revisions will fail because we didn't clone all largefiles to d:
1227 1227 $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1228 1228 $ hg verify -q --lfa --lfc
1229 changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/d/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64
1230 changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/d/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d
1231 changeset 1:ce8896473775: large1 references missing $TESTTMP/d/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f
1232 changeset 1:ce8896473775: sub/large2 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1233 changeset 3:9e8fbc4bce62: large1 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1234 changeset 4:74c02385b94c: large3 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1235 changeset 4:74c02385b94c: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1229 changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/d/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64 (glob)
1230 changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/d/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d (glob)
1231 changeset 1:ce8896473775: large1 references missing $TESTTMP/d/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f (glob)
1232 changeset 1:ce8896473775: sub/large2 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
1233 changeset 3:9e8fbc4bce62: large1 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
1234 changeset 4:74c02385b94c: large3 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
1235 changeset 4:74c02385b94c: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
1236 1236 [1]
1237 1237
1238 1238 - cleanup
1239 1239 $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
1240 1240
1241 1241 Merging does not revert to old versions of largefiles and also check
1242 1242 that merging after having pulled from a non-default remote works
1243 1243 correctly.
1244 1244
1245 1245 $ cd ..
1246 1246 $ hg clone -r 7 e temp
1247 1247 adding changesets
1248 1248 adding manifests
1249 1249 adding file changes
1250 1250 added 8 changesets with 24 changes to 10 files
1251 1251 updating to branch default
1252 1252 getting changed largefiles
1253 1253 3 largefiles updated, 0 removed
1254 1254 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1255 1255 $ hg clone temp f
1256 1256 updating to branch default
1257 1257 getting changed largefiles
1258 1258 3 largefiles updated, 0 removed
1259 1259 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1260 1260 # Delete the largefiles in the largefiles system cache so that we have an
1261 1261 # opportunity to test that caching after a pull works.
1262 1262 $ rm "${USERCACHE}"/*
1263 1263 $ cd f
1264 1264 $ echo "large4-merge-test" > sub/large4
1265 1265 $ hg commit -m "Modify large4 to test merge"
1266 1266 Invoking status precommit hook
1267 1267 M sub/large4
1268 1268 $ hg pull ../e
1269 1269 pulling from ../e
1270 1270 searching for changes
1271 1271 adding changesets
1272 1272 adding manifests
1273 1273 adding file changes
1274 1274 added 2 changesets with 4 changes to 4 files (+1 heads)
1275 1275 (run 'hg heads' to see heads, 'hg merge' to merge)
1276 1276 caching new largefiles
1277 1277 2 largefiles cached
1278 1278 $ hg merge
1279 1279 merging sub/large4
1280 1280 largefile sub/large4 has a merge conflict
1281 1281 keep (l)ocal or take (o)ther? l
1282 1282 3 files updated, 1 files merged, 0 files removed, 0 files unresolved
1283 1283 (branch merge, don't forget to commit)
1284 1284 getting changed largefiles
1285 1285 1 largefiles updated, 0 removed
1286 1286 $ hg commit -m "Merge repos e and f"
1287 1287 Invoking status precommit hook
1288 1288 M normal3
1289 1289 M sub/normal4
1290 1290 M sub2/large6
1291 1291 $ cat normal3
1292 1292 normal3-modified
1293 1293 $ cat sub/normal4
1294 1294 normal4-modified
1295 1295 $ cat sub/large4
1296 1296 large4-merge-test
1297 1297 $ cat sub2/large6
1298 1298 large6-modified
1299 1299 $ cat sub2/large7
1300 1300 large7
1301 1301
1302 1302 Test status after merging with a branch that introduces a new largefile:
1303 1303
1304 1304 $ echo large > large
1305 1305 $ hg add --large large
1306 1306 $ hg commit -m 'add largefile'
1307 1307 Invoking status precommit hook
1308 1308 A large
1309 1309 $ hg update -q ".^"
1310 1310 $ echo change >> normal3
1311 1311 $ hg commit -m 'some change'
1312 1312 Invoking status precommit hook
1313 1313 M normal3
1314 1314 created new head
1315 1315 $ hg merge
1316 1316 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1317 1317 (branch merge, don't forget to commit)
1318 1318 getting changed largefiles
1319 1319 1 largefiles updated, 0 removed
1320 1320 $ hg status
1321 1321 M large
1322 1322
1323 1323 - make sure update of merge with removed largefiles fails as expected
1324 1324 $ hg rm sub2/large6
1325 1325 $ hg up -r.
1326 1326 abort: outstanding uncommitted merges
1327 1327 [255]
1328 1328
1329 1329 - revert should be able to revert files introduced in a pending merge
1330 1330 $ hg revert --all -r .
1331 1331 removing .hglf/large (glob)
1332 1332 undeleting .hglf/sub2/large6 (glob)
1333 1333
1334 1334 Test that a normal file and a largefile with the same name and path cannot
1335 1335 coexist.
1336 1336
1337 1337 $ rm sub2/large7
1338 1338 $ echo "largeasnormal" > sub2/large7
1339 1339 $ hg add sub2/large7
1340 1340 sub2/large7 already a largefile
1341 1341
1342 1342 Test that transplanting a largefile change works correctly.
1343 1343
1344 1344 $ cd ..
1345 1345 $ hg clone -r 8 d g
1346 1346 adding changesets
1347 1347 adding manifests
1348 1348 adding file changes
1349 1349 added 9 changesets with 26 changes to 10 files
1350 1350 updating to branch default
1351 1351 getting changed largefiles
1352 1352 3 largefiles updated, 0 removed
1353 1353 5 files updated, 0 files merged, 0 files removed, 0 files unresolved
1354 1354 $ cd g
1355 1355 $ hg transplant -s ../d 598410d3eb9a
1356 1356 searching for changes
1357 1357 searching for changes
1358 1358 adding changesets
1359 1359 adding manifests
1360 1360 adding file changes
1361 1361 added 1 changesets with 2 changes to 2 files
1362 1362 getting changed largefiles
1363 1363 1 largefiles updated, 0 removed
1364 1364 $ hg log --template '{rev}:{node|short} {desc|firstline}\n'
1365 1365 9:598410d3eb9a modify normal file largefile in repo d
1366 1366 8:a381d2c8c80e modify normal file and largefile in repo b
1367 1367 7:daea875e9014 add/edit more largefiles
1368 1368 6:4355d653f84f edit files yet again
1369 1369 5:9d5af5072dbd edit files again
1370 1370 4:74c02385b94c move files
1371 1371 3:9e8fbc4bce62 copy files
1372 1372 2:51a0ae4d5864 remove files
1373 1373 1:ce8896473775 edit files
1374 1374 0:30d30fe6a5be add files
1375 1375 $ cat normal3
1376 1376 normal3-modified
1377 1377 $ cat sub/normal4
1378 1378 normal4-modified
1379 1379 $ cat sub/large4
1380 1380 large4-modified
1381 1381 $ cat sub2/large6
1382 1382 large6-modified
1383 1383 $ cat sub2/large7
1384 1384 large7
1385 1385
1386 1386 Cat a largefile
1387 1387 $ hg cat normal3
1388 1388 normal3-modified
1389 1389 $ hg cat sub/large4
1390 1390 large4-modified
1391 1391 $ rm "${USERCACHE}"/*
1392 1392 $ hg cat -r a381d2c8c80e -o cat.out sub/large4
1393 1393 $ cat cat.out
1394 1394 large4-modified
1395 1395 $ rm cat.out
1396 1396 $ hg cat -r a381d2c8c80e normal3
1397 1397 normal3-modified
1398 1398 $ hg cat -r '.^' normal3
1399 1399 normal3-modified
1400 1400 $ hg cat -r '.^' sub/large4 doesntexist
1401 1401 large4-modified
1402 1402 doesntexist: no such file in rev a381d2c8c80e
1403 1403 [1]
1404 1404
1405 1405 Test that renaming a largefile results in correct output for status
1406 1406
1407 1407 $ hg rename sub/large4 large4-renamed
1408 1408 $ hg commit -m "test rename output"
1409 1409 Invoking status precommit hook
1410 1410 A large4-renamed
1411 1411 R sub/large4
1412 1412 $ cat large4-renamed
1413 1413 large4-modified
1414 1414 $ cd sub2
1415 1415 $ hg rename large6 large6-renamed
1416 1416 $ hg st
1417 1417 A sub2/large6-renamed
1418 1418 R sub2/large6
1419 1419 $ cd ..
1420 1420
1421 1421 Test --normal flag
1422 1422
1423 1423 $ dd if=/dev/zero bs=2k count=11k > new-largefile 2> /dev/null
1424 1424 $ hg add --normal --large new-largefile
1425 1425 abort: --normal cannot be used with --large
1426 1426 [255]
1427 1427 $ hg add --normal new-largefile
1428 1428 new-largefile: up to 69 MB of RAM may be required to manage this file
1429 1429 (use 'hg revert new-largefile' to cancel the pending addition)
1430 1430 $ cd ..
1431 1431
1432 1432 #if serve
1433 1433 vanilla clients not locked out from largefiles servers on vanilla repos
1434 1434 $ mkdir r1
1435 1435 $ cd r1
1436 1436 $ hg init
1437 1437 $ echo c1 > f1
1438 1438 $ hg add f1
1439 1439 $ hg commit -m "m1"
1440 1440 Invoking status precommit hook
1441 1441 A f1
1442 1442 $ cd ..
1443 1443 $ hg serve -R r1 -d -p $HGPORT --pid-file hg.pid
1444 1444 $ cat hg.pid >> $DAEMON_PIDS
1445 1445 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT r2
1446 1446 requesting all changes
1447 1447 adding changesets
1448 1448 adding manifests
1449 1449 adding file changes
1450 1450 added 1 changesets with 1 changes to 1 files
1451 1451 updating to branch default
1452 1452 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1453 1453
1454 1454 largefiles clients still work with vanilla servers
1455 1455 $ hg --config extensions.largefiles=! serve -R r1 -d -p $HGPORT1 --pid-file hg.pid
1456 1456 $ cat hg.pid >> $DAEMON_PIDS
1457 1457 $ hg clone http://localhost:$HGPORT1 r3
1458 1458 requesting all changes
1459 1459 adding changesets
1460 1460 adding manifests
1461 1461 adding file changes
1462 1462 added 1 changesets with 1 changes to 1 files
1463 1463 updating to branch default
1464 1464 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1465 1465 #endif
1466 1466
1467 1467
1468 1468 vanilla clients locked out from largefiles http repos
1469 1469 $ mkdir r4
1470 1470 $ cd r4
1471 1471 $ hg init
1472 1472 $ echo c1 > f1
1473 1473 $ hg add --large f1
1474 1474 $ hg commit -m "m1"
1475 1475 Invoking status precommit hook
1476 1476 A f1
1477 1477 $ cd ..
1478 1478
1479 1479 largefiles can be pushed locally (issue3583)
1480 1480 $ hg init dest
1481 1481 $ cd r4
1482 1482 $ hg outgoing ../dest
1483 1483 comparing with ../dest
1484 1484 searching for changes
1485 1485 changeset: 0:639881c12b4c
1486 1486 tag: tip
1487 1487 user: test
1488 1488 date: Thu Jan 01 00:00:00 1970 +0000
1489 1489 summary: m1
1490 1490
1491 1491 $ hg push ../dest
1492 1492 pushing to ../dest
1493 1493 searching for changes
1494 1494 searching for changes
1495 1495 adding changesets
1496 1496 adding manifests
1497 1497 adding file changes
1498 1498 added 1 changesets with 1 changes to 1 files
1499 1499
1500 1500 exit code with nothing outgoing (issue3611)
1501 1501 $ hg outgoing ../dest
1502 1502 comparing with ../dest
1503 1503 searching for changes
1504 1504 no changes found
1505 1505 [1]
1506 1506 $ cd ..
1507 1507
1508 1508 #if serve
1509 1509 $ hg serve -R r4 -d -p $HGPORT2 --pid-file hg.pid
1510 1510 $ cat hg.pid >> $DAEMON_PIDS
1511 1511 $ hg --config extensions.largefiles=! clone http://localhost:$HGPORT2 r5
1512 1512 abort: remote error:
1513 1513
1514 1514 This repository uses the largefiles extension.
1515 1515
1516 1516 Please enable it in your Mercurial config file.
1517 1517 [255]
1518 1518
1519 1519 used all HGPORTs, kill all daemons
1520 1520 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1521 1521 #endif
1522 1522
1523 1523 vanilla clients locked out from largefiles ssh repos
1524 1524 $ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5
1525 1525 abort: remote error:
1526 1526
1527 1527 This repository uses the largefiles extension.
1528 1528
1529 1529 Please enable it in your Mercurial config file.
1530 1530 [255]
1531 1531
1532 1532 #if serve
1533 1533
1534 1534 largefiles clients refuse to push largefiles repos to vanilla servers
1535 1535 $ mkdir r6
1536 1536 $ cd r6
1537 1537 $ hg init
1538 1538 $ echo c1 > f1
1539 1539 $ hg add f1
1540 1540 $ hg commit -m "m1"
1541 1541 Invoking status precommit hook
1542 1542 A f1
1543 1543 $ cat >> .hg/hgrc <<!
1544 1544 > [web]
1545 1545 > push_ssl = false
1546 1546 > allow_push = *
1547 1547 > !
1548 1548 $ cd ..
1549 1549 $ hg clone r6 r7
1550 1550 updating to branch default
1551 1551 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1552 1552 $ cd r7
1553 1553 $ echo c2 > f2
1554 1554 $ hg add --large f2
1555 1555 $ hg commit -m "m2"
1556 1556 Invoking status precommit hook
1557 1557 A f2
1558 1558 $ hg --config extensions.largefiles=! -R ../r6 serve -d -p $HGPORT --pid-file ../hg.pid
1559 1559 $ cat ../hg.pid >> $DAEMON_PIDS
1560 1560 $ hg push http://localhost:$HGPORT
1561 1561 pushing to http://localhost:$HGPORT/
1562 1562 searching for changes
1563 1563 abort: http://localhost:$HGPORT/ does not appear to be a largefile store
1564 1564 [255]
1565 1565 $ cd ..
1566 1566
1567 1567 putlfile errors are shown (issue3123)
1568 1568 Corrupt the cached largefile in r7 and move it out of the servers usercache
1569 1569 $ mv r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 .
1570 1570 $ echo 'client side corruption' > r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1571 1571 $ rm "$USERCACHE/4cdac4d8b084d0b599525cf732437fb337d422a8"
1572 1572 $ hg init empty
1573 1573 $ hg serve -R empty -d -p $HGPORT1 --pid-file hg.pid \
1574 1574 > --config 'web.allow_push=*' --config web.push_ssl=False
1575 1575 $ cat hg.pid >> $DAEMON_PIDS
1576 1576 $ hg push -R r7 http://localhost:$HGPORT1
1577 1577 pushing to http://localhost:$HGPORT1/
1578 1578 searching for changes
1579 1579 remote: largefiles: failed to put 4cdac4d8b084d0b599525cf732437fb337d422a8 into store: largefile contents do not match hash
1580 1580 abort: remotestore: could not put $TESTTMP/r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8 to remote store http://localhost:$HGPORT1/ (glob)
1581 1581 [255]
1582 1582 $ mv 4cdac4d8b084d0b599525cf732437fb337d422a8 r7/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1583 1583 Push of file that exists on server but is corrupted - magic healing would be nice ... but too magic
1584 1584 $ echo "server side corruption" > empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1585 1585 $ hg push -R r7 http://localhost:$HGPORT1
1586 1586 pushing to http://localhost:$HGPORT1/
1587 1587 searching for changes
1588 1588 searching for changes
1589 1589 remote: adding changesets
1590 1590 remote: adding manifests
1591 1591 remote: adding file changes
1592 1592 remote: added 2 changesets with 2 changes to 2 files
1593 1593 $ cat empty/.hg/largefiles/4cdac4d8b084d0b599525cf732437fb337d422a8
1594 1594 server side corruption
1595 1595 $ rm -rf empty
1596 1596
1597 1597 Push a largefiles repository to a served empty repository
1598 1598 $ hg init r8
1599 1599 $ echo c3 > r8/f1
1600 1600 $ hg add --large r8/f1 -R r8
1601 1601 $ hg commit -m "m1" -R r8
1602 1602 Invoking status precommit hook
1603 1603 A f1
1604 1604 $ hg init empty
1605 1605 $ hg serve -R empty -d -p $HGPORT2 --pid-file hg.pid \
1606 1606 > --config 'web.allow_push=*' --config web.push_ssl=False
1607 1607 $ cat hg.pid >> $DAEMON_PIDS
1608 1608 $ rm "${USERCACHE}"/*
1609 1609 $ hg push -R r8 http://localhost:$HGPORT2/#default
1610 1610 pushing to http://localhost:$HGPORT2/
1611 1611 searching for changes
1612 1612 searching for changes
1613 1613 remote: adding changesets
1614 1614 remote: adding manifests
1615 1615 remote: adding file changes
1616 1616 remote: added 1 changesets with 1 changes to 1 files
1617 1617 $ [ -f "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1618 1618 $ [ -f empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1619 1619
1620 1620 Clone over http, no largefiles pulled on clone.
1621 1621
1622 1622 $ hg clone http://localhost:$HGPORT2/#default http-clone -U
1623 1623 adding changesets
1624 1624 adding manifests
1625 1625 adding file changes
1626 1626 added 1 changesets with 1 changes to 1 files
1627 1627
1628 1628 test 'verify' with remotestore:
1629 1629
1630 1630 $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
1631 1631 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1632 1632 $ hg -R http-clone verify --large --lfa
1633 1633 checking changesets
1634 1634 checking manifests
1635 1635 crosschecking files in changesets and manifests
1636 1636 checking files
1637 1637 1 files, 1 changesets, 1 total revisions
1638 1638 searching 1 changesets for largefiles
1639 1639 changeset 0:cf03e5bb9936: f1 missing
1640 1640 verified existence of 1 revisions of 1 largefiles
1641 1641 [1]
1642 1642 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1643 1643 $ hg -R http-clone -q verify --large --lfa
1644 1644
1645 1645 largefiles pulled on update - a largefile missing on the server:
1646 1646 $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
1647 1647 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1648 1648 getting changed largefiles
1649 1649 abort: remotestore: largefile 02a439e5c31c526465ab1a0ca1f431f76b827b90 is missing
1650 1650 [255]
1651 1651 $ hg -R http-clone up -Cqr null
1652 1652
1653 1653 largefiles pulled on update - a largefile corrupted on the server:
1654 1654 $ echo corruption > empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90
1655 1655 $ hg -R http-clone up --config largefiles.usercache=http-clone-usercache
1656 1656 getting changed largefiles
1657 1657 f1: data corruption (expected 02a439e5c31c526465ab1a0ca1f431f76b827b90, got 6a7bb2556144babe3899b25e5428123735bb1e27)
1658 1658 0 largefiles updated, 0 removed
1659 1659 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1660 1660 $ hg -R http-clone st
1661 1661 ! f1
1662 1662 $ [ ! -f http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 ]
1663 1663 $ [ ! -f http-clone/f1 ]
1664 1664 $ [ ! -f http-clone-usercache ]
1665 1665 $ hg -R http-clone verify --large --lfc
1666 1666 checking changesets
1667 1667 checking manifests
1668 1668 crosschecking files in changesets and manifests
1669 1669 checking files
1670 1670 1 files, 1 changesets, 1 total revisions
1671 1671 searching 1 changesets for largefiles
1672 1672 verified contents of 1 revisions of 1 largefiles
1673 1673 $ hg -R http-clone up -Cqr null
1674 1674
1675 1675 largefiles pulled on update - no server side problems:
1676 1676 $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
1677 1677 $ hg -R http-clone --debug up --config largefiles.usercache=http-clone-usercache
1678 1678 resolving manifests
1679 1679 overwrite: False, partial: False
1680 1680 ancestor: 000000000000, local: 000000000000+, remote: cf03e5bb9936
1681 1681 .hglf/f1: remote created -> g
1682 1682 updating: .hglf/f1 1/1 files (100.00%)
1683 1683 getting .hglf/f1
1684 1684 getting changed largefiles
1685 1685 using http://localhost:$HGPORT2/
1686 1686 sending capabilities command
1687 1687 getting largefiles: 0/1 lfile (0.00%)
1688 1688 getting f1:02a439e5c31c526465ab1a0ca1f431f76b827b90
1689 1689 sending batch command
1690 1690 sending getlfile command
1691 1691 found 02a439e5c31c526465ab1a0ca1f431f76b827b90 in store
1692 1692 1 largefiles updated, 0 removed
1693 1693 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1694 1694
1695 1695 $ ls http-clone-usercache/*
1696 1696 http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
1697 1697
1698 1698 $ rm -rf empty http-clone*
1699 1699
1700 1700 used all HGPORTs, kill all daemons
1701 1701 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
1702 1702
1703 1703 #endif
1704 1704
1705 1705
1706 1706 #if unix-permissions
1707 1707
1708 1708 Clone a local repository owned by another user
1709 1709 We have to simulate that here by setting $HOME and removing write permissions
1710 1710 $ ORIGHOME="$HOME"
1711 1711 $ mkdir alice
1712 1712 $ HOME="`pwd`/alice"
1713 1713 $ cd alice
1714 1714 $ hg init pubrepo
1715 1715 $ cd pubrepo
1716 1716 $ dd if=/dev/zero bs=1k count=11k > a-large-file 2> /dev/null
1717 1717 $ hg add --large a-large-file
1718 1718 $ hg commit -m "Add a large file"
1719 1719 Invoking status precommit hook
1720 1720 A a-large-file
1721 1721 $ cd ..
1722 1722 $ chmod -R a-w pubrepo
1723 1723 $ cd ..
1724 1724 $ mkdir bob
1725 1725 $ HOME="`pwd`/bob"
1726 1726 $ cd bob
1727 1727 $ hg clone --pull ../alice/pubrepo pubrepo
1728 1728 requesting all changes
1729 1729 adding changesets
1730 1730 adding manifests
1731 1731 adding file changes
1732 1732 added 1 changesets with 1 changes to 1 files
1733 1733 updating to branch default
1734 1734 getting changed largefiles
1735 1735 1 largefiles updated, 0 removed
1736 1736 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1737 1737 $ cd ..
1738 1738 $ chmod -R u+w alice/pubrepo
1739 1739 $ HOME="$ORIGHOME"
1740 1740
1741 1741 #endif
1742 1742
1743 1743 #if symlink
1744 1744
1745 1745 Symlink to a large largefile should behave the same as a symlink to a normal file
1746 1746 $ hg init largesymlink
1747 1747 $ cd largesymlink
1748 1748 $ dd if=/dev/zero bs=1k count=10k of=largefile 2>/dev/null
1749 1749 $ hg add --large largefile
1750 1750 $ hg commit -m "commit a large file"
1751 1751 Invoking status precommit hook
1752 1752 A largefile
1753 1753 $ ln -s largefile largelink
1754 1754 $ hg add largelink
1755 1755 $ hg commit -m "commit a large symlink"
1756 1756 Invoking status precommit hook
1757 1757 A largelink
1758 1758 $ rm -f largelink
1759 1759 $ hg up >/dev/null
1760 1760 $ test -f largelink
1761 1761 [1]
1762 1762 $ test -L largelink
1763 1763 [1]
1764 1764 $ rm -f largelink # make next part of the test independent of the previous
1765 1765 $ hg up -C >/dev/null
1766 1766 $ test -f largelink
1767 1767 $ test -L largelink
1768 1768 $ cd ..
1769 1769
1770 1770 #endif
1771 1771
1772 1772 test for pattern matching on 'hg status':
1773 1773 to boost performance, largefiles checks whether specified patterns are
1774 1774 related to largefiles in working directory (NOT to STANDIN) or not.
1775 1775
1776 1776 $ hg init statusmatch
1777 1777 $ cd statusmatch
1778 1778
1779 1779 $ mkdir -p a/b/c/d
1780 1780 $ echo normal > a/b/c/d/e.normal.txt
1781 1781 $ hg add a/b/c/d/e.normal.txt
1782 1782 $ echo large > a/b/c/d/e.large.txt
1783 1783 $ hg add --large a/b/c/d/e.large.txt
1784 1784 $ mkdir -p a/b/c/x
1785 1785 $ echo normal > a/b/c/x/y.normal.txt
1786 1786 $ hg add a/b/c/x/y.normal.txt
1787 1787 $ hg commit -m 'add files'
1788 1788 Invoking status precommit hook
1789 1789 A a/b/c/d/e.large.txt
1790 1790 A a/b/c/d/e.normal.txt
1791 1791 A a/b/c/x/y.normal.txt
1792 1792
1793 1793 (1) no pattern: no performance boost
1794 1794 $ hg status -A
1795 1795 C a/b/c/d/e.large.txt
1796 1796 C a/b/c/d/e.normal.txt
1797 1797 C a/b/c/x/y.normal.txt
1798 1798
1799 1799 (2) pattern not related to largefiles: performance boost
1800 1800 $ hg status -A a/b/c/x
1801 1801 C a/b/c/x/y.normal.txt
1802 1802
1803 1803 (3) pattern related to largefiles: no performance boost
1804 1804 $ hg status -A a/b/c/d
1805 1805 C a/b/c/d/e.large.txt
1806 1806 C a/b/c/d/e.normal.txt
1807 1807
1808 1808 (4) pattern related to STANDIN (not to largefiles): performance boost
1809 1809 $ hg status -A .hglf/a
1810 1810 C .hglf/a/b/c/d/e.large.txt
1811 1811
1812 1812 (5) mixed case: no performance boost
1813 1813 $ hg status -A a/b/c/x a/b/c/d
1814 1814 C a/b/c/d/e.large.txt
1815 1815 C a/b/c/d/e.normal.txt
1816 1816 C a/b/c/x/y.normal.txt
1817 1817
1818 1818 verify that largefiles doesn't break filesets
1819 1819
1820 1820 $ hg log --rev . --exclude "set:binary()"
1821 1821 changeset: 0:41bd42f10efa
1822 1822 tag: tip
1823 1823 user: test
1824 1824 date: Thu Jan 01 00:00:00 1970 +0000
1825 1825 summary: add files
1826 1826
1827 1827 verify that large files in subrepos handled properly
1828 1828 $ hg init subrepo
1829 1829 $ echo "subrepo = subrepo" > .hgsub
1830 1830 $ hg add .hgsub
1831 1831 $ hg ci -m "add subrepo"
1832 1832 Invoking status precommit hook
1833 1833 A .hgsub
1834 1834 ? .hgsubstate
1835 1835 $ echo "rev 1" > subrepo/large.txt
1836 1836 $ hg -R subrepo add --large subrepo/large.txt
1837 1837 $ hg sum
1838 1838 parent: 1:8ee150ea2e9c tip
1839 1839 add subrepo
1840 1840 branch: default
1841 1841 commit: 1 subrepos
1842 1842 update: (current)
1843 1843 $ hg st
1844 1844 $ hg st -S
1845 1845 A subrepo/large.txt
1846 1846 $ hg ci -S -m "commit top repo"
1847 1847 committing subrepository subrepo
1848 1848 Invoking status precommit hook
1849 1849 A large.txt
1850 1850 Invoking status precommit hook
1851 1851 M .hgsubstate
1852 1852 # No differences
1853 1853 $ hg st -S
1854 1854 $ hg sum
1855 1855 parent: 2:ce4cd0c527a6 tip
1856 1856 commit top repo
1857 1857 branch: default
1858 1858 commit: (clean)
1859 1859 update: (current)
1860 1860 $ echo "rev 2" > subrepo/large.txt
1861 1861 $ hg st -S
1862 1862 M subrepo/large.txt
1863 1863 $ hg sum
1864 1864 parent: 2:ce4cd0c527a6 tip
1865 1865 commit top repo
1866 1866 branch: default
1867 1867 commit: 1 subrepos
1868 1868 update: (current)
1869 1869 $ hg ci -m "this commit should fail without -S"
1870 1870 abort: uncommitted changes in subrepo subrepo
1871 1871 (use --subrepos for recursive commit)
1872 1872 [255]
1873 1873
1874 1874 Add a normal file to the subrepo, then test archiving
1875 1875
1876 1876 $ echo 'normal file' > subrepo/normal.txt
1877 1877 $ hg -R subrepo add subrepo/normal.txt
1878 1878
1879 1879 Lock in subrepo, otherwise the change isn't archived
1880 1880
1881 1881 $ hg ci -S -m "add normal file to top level"
1882 1882 committing subrepository subrepo
1883 1883 Invoking status precommit hook
1884 1884 M large.txt
1885 1885 A normal.txt
1886 1886 Invoking status precommit hook
1887 1887 M .hgsubstate
1888 1888 $ hg archive -S ../lf_subrepo_archive
1889 1889 $ find ../lf_subrepo_archive | sort
1890 1890 ../lf_subrepo_archive
1891 1891 ../lf_subrepo_archive/.hg_archival.txt
1892 1892 ../lf_subrepo_archive/.hgsub
1893 1893 ../lf_subrepo_archive/.hgsubstate
1894 1894 ../lf_subrepo_archive/a
1895 1895 ../lf_subrepo_archive/a/b
1896 1896 ../lf_subrepo_archive/a/b/c
1897 1897 ../lf_subrepo_archive/a/b/c/d
1898 1898 ../lf_subrepo_archive/a/b/c/d/e.large.txt
1899 1899 ../lf_subrepo_archive/a/b/c/d/e.normal.txt
1900 1900 ../lf_subrepo_archive/a/b/c/x
1901 1901 ../lf_subrepo_archive/a/b/c/x/y.normal.txt
1902 1902 ../lf_subrepo_archive/subrepo
1903 1903 ../lf_subrepo_archive/subrepo/large.txt
1904 1904 ../lf_subrepo_archive/subrepo/normal.txt
1905 1905
1906 1906 Test update with subrepos.
1907 1907
1908 1908 $ hg update 0
1909 1909 getting changed largefiles
1910 1910 0 largefiles updated, 1 removed
1911 1911 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
1912 1912 $ hg status -S
1913 1913 $ hg update tip
1914 1914 getting changed largefiles
1915 1915 1 largefiles updated, 0 removed
1916 1916 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1917 1917 $ hg status -S
1918 1918 # modify a large file
1919 1919 $ echo "modified" > subrepo/large.txt
1920 1920 $ hg st -S
1921 1921 M subrepo/large.txt
1922 1922 # update -C should revert the change.
1923 1923 $ hg update -C
1924 1924 getting changed largefiles
1925 1925 1 largefiles updated, 0 removed
1926 1926 getting changed largefiles
1927 1927 0 largefiles updated, 0 removed
1928 1928 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1929 1929 $ hg status -S
1930 1930
1931 1931 Test archiving a revision that references a subrepo that is not yet
1932 1932 cloned (see test-subrepo-recursion.t):
1933 1933
1934 1934 $ hg clone -U . ../empty
1935 1935 $ cd ../empty
1936 1936 $ hg archive --subrepos -r tip ../archive.tar.gz
1937 1937 cloning subrepo subrepo from $TESTTMP/statusmatch/subrepo
1938 1938 $ cd ..
1939 1939
1940 1940 Test that addremove picks up largefiles prior to the initial commit (issue3541)
1941 1941
1942 1942 $ hg init addrm2
1943 1943 $ cd addrm2
1944 1944 $ touch large.dat
1945 1945 $ touch large2.dat
1946 1946 $ touch normal
1947 1947 $ hg add --large large.dat
1948 1948 $ hg addremove -v
1949 1949 adding large2.dat as a largefile
1950 1950 adding normal
1951 1951
1952 1952 Test that forgetting all largefiles reverts to islfilesrepo() == False
1953 1953 (addremove will add *.dat as normal files now)
1954 1954 $ hg forget large.dat
1955 1955 $ hg forget large2.dat
1956 1956 $ hg addremove -v
1957 1957 adding large.dat
1958 1958 adding large2.dat
1959 1959
1960 1960 Test commit's addremove option prior to the first commit
1961 1961 $ hg forget large.dat
1962 1962 $ hg forget large2.dat
1963 1963 $ hg add --large large.dat
1964 1964 $ hg ci -Am "commit"
1965 1965 adding large2.dat as a largefile
1966 1966 Invoking status precommit hook
1967 1967 A large.dat
1968 1968 A large2.dat
1969 1969 A normal
1970 1970 $ find .hglf | sort
1971 1971 .hglf
1972 1972 .hglf/large.dat
1973 1973 .hglf/large2.dat
1974 1974
1975 1975 Test actions on largefiles using relative paths from subdir
1976 1976
1977 1977 $ mkdir sub
1978 1978 $ cd sub
1979 1979 $ echo anotherlarge > anotherlarge
1980 1980 $ hg add --large anotherlarge
1981 1981 $ hg st
1982 1982 A sub/anotherlarge
1983 1983 $ hg st anotherlarge
1984 1984 A anotherlarge
1985 1985 $ hg commit -m anotherlarge anotherlarge
1986 1986 Invoking status precommit hook
1987 1987 A sub/anotherlarge
1988 1988 $ hg log anotherlarge
1989 1989 changeset: 1:9627a577c5e9
1990 1990 tag: tip
1991 1991 user: test
1992 1992 date: Thu Jan 01 00:00:00 1970 +0000
1993 1993 summary: anotherlarge
1994 1994
1995 1995 $ echo more >> anotherlarge
1996 1996 $ hg st .
1997 1997 M anotherlarge
1998 1998 $ hg cat anotherlarge
1999 1999 anotherlarge
2000 2000 $ hg revert anotherlarge
2001 2001 $ hg st
2002 2002 ? sub/anotherlarge.orig
2003 2003 $ cd ..
2004 2004
2005 2005 $ cd ..
2006 2006
2007 2007 issue3651: summary/outgoing with largefiles shows "no remote repo"
2008 2008 unexpectedly
2009 2009
2010 2010 $ mkdir issue3651
2011 2011 $ cd issue3651
2012 2012
2013 2013 $ hg init src
2014 2014 $ echo a > src/a
2015 2015 $ hg -R src add --large src/a
2016 2016 $ hg -R src commit -m '#0'
2017 2017 Invoking status precommit hook
2018 2018 A a
2019 2019
2020 2020 check messages when no remote repository is specified:
2021 2021 "no remote repo" route for "hg outgoing --large" is not tested here,
2022 2022 because it can't be reproduced easily.
2023 2023
2024 2024 $ hg init clone1
2025 2025 $ hg -R clone1 -q pull src
2026 2026 $ hg -R clone1 -q update
2027 2027 $ hg -R clone1 paths | grep default
2028 2028 [1]
2029 2029
2030 2030 $ hg -R clone1 summary --large
2031 2031 parent: 0:fc0bd45326d3 tip
2032 2032 #0
2033 2033 branch: default
2034 2034 commit: (clean)
2035 2035 update: (current)
2036 2036 largefiles: (no remote repo)
2037 2037
2038 2038 check messages when there is no files to upload:
2039 2039
2040 2040 $ hg -q clone src clone2
2041 2041 $ hg -R clone2 paths | grep default
2042 2042 default = $TESTTMP/issue3651/src (glob)
2043 2043
2044 2044 $ hg -R clone2 summary --large
2045 2045 parent: 0:fc0bd45326d3 tip
2046 2046 #0
2047 2047 branch: default
2048 2048 commit: (clean)
2049 2049 update: (current)
2050 2050 searching for changes
2051 2051 largefiles: (no files to upload)
2052 2052 $ hg -R clone2 outgoing --large
2053 2053 comparing with $TESTTMP/issue3651/src (glob)
2054 2054 searching for changes
2055 2055 no changes found
2056 2056 searching for changes
2057 2057 largefiles: no files to upload
2058 2058 [1]
2059 2059
2060 2060 check messages when there are files to upload:
2061 2061
2062 2062 $ echo b > clone2/b
2063 2063 $ hg -R clone2 add --large clone2/b
2064 2064 $ hg -R clone2 commit -m '#1'
2065 2065 Invoking status precommit hook
2066 2066 A b
2067 2067 $ hg -R clone2 summary --large
2068 2068 parent: 1:1acbe71ce432 tip
2069 2069 #1
2070 2070 branch: default
2071 2071 commit: (clean)
2072 2072 update: (current)
2073 2073 searching for changes
2074 2074 largefiles: 1 to upload
2075 2075 $ hg -R clone2 outgoing --large
2076 2076 comparing with $TESTTMP/issue3651/src (glob)
2077 2077 searching for changes
2078 2078 changeset: 1:1acbe71ce432
2079 2079 tag: tip
2080 2080 user: test
2081 2081 date: Thu Jan 01 00:00:00 1970 +0000
2082 2082 summary: #1
2083 2083
2084 2084 searching for changes
2085 2085 largefiles to upload:
2086 2086 b
2087 2087
2088 2088
2089 2089 $ cd ..
@@ -1,350 +1,350
1 1 $ USERCACHE="$TESTTMP/cache"; export USERCACHE
2 2 $ mkdir "${USERCACHE}"
3 3 $ cat >> $HGRCPATH <<EOF
4 4 > [extensions]
5 5 > largefiles =
6 6 > share =
7 7 > graphlog =
8 8 > mq =
9 9 > convert =
10 10 > [largefiles]
11 11 > minsize = 0.5
12 12 > patterns = **.other
13 13 > **.dat
14 14 > usercache=${USERCACHE}
15 15 > EOF
16 16
17 17 "lfconvert" works
18 18 $ hg init bigfile-repo
19 19 $ cd bigfile-repo
20 20 $ cat >> .hg/hgrc <<EOF
21 21 > [extensions]
22 22 > largefiles = !
23 23 > EOF
24 24 $ mkdir sub
25 25 $ dd if=/dev/zero bs=1k count=256 > large 2> /dev/null
26 26 $ dd if=/dev/zero bs=1k count=256 > large2 2> /dev/null
27 27 $ echo normal > normal1
28 28 $ echo alsonormal > sub/normal2
29 29 $ dd if=/dev/zero bs=1k count=10 > sub/maybelarge.dat 2> /dev/null
30 30 $ hg addremove
31 31 adding large
32 32 adding large2
33 33 adding normal1
34 34 adding sub/maybelarge.dat
35 35 adding sub/normal2
36 36 $ hg commit -m"add large, normal1" large normal1
37 37 $ hg commit -m"add sub/*" sub
38 38
39 39 Test tag parsing
40 40 $ cat >> .hgtags <<EOF
41 41 > IncorrectlyFormattedTag!
42 42 > invalidhash sometag
43 43 > 0123456789abcdef anothertag
44 44 > EOF
45 45 $ hg add .hgtags
46 46 $ hg commit -m"add large2" large2 .hgtags
47 47
48 48 Test link+rename largefile codepath
49 49 $ [ -d .hg/largefiles ] && echo fail || echo pass
50 50 pass
51 51 $ cd ..
52 52 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
53 53 initializing destination largefiles-repo
54 54 skipping incorrectly formatted tag IncorrectlyFormattedTag!
55 55 skipping incorrectly formatted id invalidhash
56 56 no mapping for id 0123456789abcdef
57 57 #if symlink
58 58 $ hg --cwd bigfile-repo rename large2 large3
59 59 $ ln -sf large bigfile-repo/large3
60 60 $ hg --cwd bigfile-repo commit -m"make large2 a symlink" large2 large3
61 61 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo-symlink
62 62 initializing destination largefiles-repo-symlink
63 63 skipping incorrectly formatted tag IncorrectlyFormattedTag!
64 64 skipping incorrectly formatted id invalidhash
65 65 no mapping for id 0123456789abcdef
66 66 abort: renamed/copied largefile large3 becomes symlink
67 67 [255]
68 68 #endif
69 69 $ cd bigfile-repo
70 70 $ hg strip --no-backup 2
71 71 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
72 72 $ cd ..
73 73 $ rm -rf largefiles-repo largefiles-repo-symlink
74 74
75 75 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
76 76 initializing destination largefiles-repo
77 77
78 78 "lfconvert" converts content correctly
79 79 $ cd largefiles-repo
80 80 $ hg up
81 81 getting changed largefiles
82 82 2 largefiles updated, 0 removed
83 83 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
84 84 $ hg locate
85 85 .hglf/large
86 86 .hglf/sub/maybelarge.dat
87 87 normal1
88 88 sub/normal2
89 89 $ cat normal1
90 90 normal
91 91 $ cat sub/normal2
92 92 alsonormal
93 93 $ "$TESTDIR/md5sum.py" large sub/maybelarge.dat
94 94 ec87a838931d4d5d2e94a04644788a55 large
95 95 1276481102f218c981e0324180bafd9f sub/maybelarge.dat
96 96
97 97 "lfconvert" adds 'largefiles' to .hg/requires.
98 98 $ cat .hg/requires
99 99 dotencode
100 100 fncache
101 101 largefiles
102 102 revlogv1
103 103 store
104 104
105 105 "lfconvert" includes a newline at the end of the standin files.
106 106 $ cat .hglf/large .hglf/sub/maybelarge.dat
107 107 2e000fa7e85759c7f4c254d4d9c33ef481e459a7
108 108 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
109 109 $ cd ..
110 110
111 111 add some changesets to rename/remove/merge
112 112 $ cd bigfile-repo
113 113 $ hg mv -q sub stuff
114 114 $ hg commit -m"rename sub/ to stuff/"
115 115 $ hg update -q 1
116 116 $ echo blah >> normal3
117 117 $ echo blah >> sub/normal2
118 118 $ echo blah >> sub/maybelarge.dat
119 119 $ "$TESTDIR/md5sum.py" sub/maybelarge.dat
120 120 1dd0b99ff80e19cff409702a1d3f5e15 sub/maybelarge.dat
121 121 $ hg commit -A -m"add normal3, modify sub/*"
122 122 adding normal3
123 123 created new head
124 124 $ hg rm large normal3
125 125 $ hg commit -q -m"remove large, normal3"
126 126 $ hg merge
127 127 merging sub/maybelarge.dat and stuff/maybelarge.dat to stuff/maybelarge.dat
128 128 warning: $TESTTMP/bigfile-repo/stuff/maybelarge.dat looks like a binary file. (glob)
129 129 merging stuff/maybelarge.dat incomplete! (edit conflicts, then use 'hg resolve --mark')
130 130 merging sub/normal2 and stuff/normal2 to stuff/normal2
131 131 0 files updated, 1 files merged, 0 files removed, 1 files unresolved
132 132 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
133 133 [1]
134 134 $ hg cat -r . sub/maybelarge.dat > stuff/maybelarge.dat
135 135 $ hg resolve -m stuff/maybelarge.dat
136 136 $ hg commit -m"merge"
137 137 $ hg glog --template "{rev}:{node|short} {desc|firstline}\n"
138 138 @ 5:4884f215abda merge
139 139 |\
140 140 | o 4:7285f817b77e remove large, normal3
141 141 | |
142 142 | o 3:67e3892e3534 add normal3, modify sub/*
143 143 | |
144 144 o | 2:c96c8beb5d56 rename sub/ to stuff/
145 145 |/
146 146 o 1:020c65d24e11 add sub/*
147 147 |
148 148 o 0:117b8328f97a add large, normal1
149 149
150 150 $ cd ..
151 151
152 152 lfconvert with rename, merge, and remove
153 153 $ rm -rf largefiles-repo
154 154 $ hg lfconvert --size 0.2 bigfile-repo largefiles-repo
155 155 initializing destination largefiles-repo
156 156 $ cd largefiles-repo
157 157 $ hg glog --template "{rev}:{node|short} {desc|firstline}\n"
158 158 o 5:8e05f5f2b77e merge
159 159 |\
160 160 | o 4:a5a02de7a8e4 remove large, normal3
161 161 | |
162 162 | o 3:55759520c76f add normal3, modify sub/*
163 163 | |
164 164 o | 2:261ad3f3f037 rename sub/ to stuff/
165 165 |/
166 166 o 1:334e5237836d add sub/*
167 167 |
168 168 o 0:d4892ec57ce2 add large, normal1
169 169
170 170 $ hg locate -r 2
171 171 .hglf/large
172 172 .hglf/stuff/maybelarge.dat
173 173 normal1
174 174 stuff/normal2
175 175 $ hg locate -r 3
176 176 .hglf/large
177 177 .hglf/sub/maybelarge.dat
178 178 normal1
179 179 normal3
180 180 sub/normal2
181 181 $ hg locate -r 4
182 182 .hglf/sub/maybelarge.dat
183 183 normal1
184 184 sub/normal2
185 185 $ hg locate -r 5
186 186 .hglf/stuff/maybelarge.dat
187 187 normal1
188 188 stuff/normal2
189 189 $ hg update
190 190 getting changed largefiles
191 191 1 largefiles updated, 0 removed
192 192 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
193 193 $ cat stuff/normal2
194 194 alsonormal
195 195 blah
196 196 $ "$TESTDIR/md5sum.py" stuff/maybelarge.dat
197 197 1dd0b99ff80e19cff409702a1d3f5e15 stuff/maybelarge.dat
198 198 $ cat .hglf/stuff/maybelarge.dat
199 199 76236b6a2c6102826c61af4297dd738fb3b1de38
200 200 $ cd ..
201 201
202 202 "lfconvert" error cases
203 203 $ hg lfconvert http://localhost/foo foo
204 204 abort: http://localhost/foo is not a local Mercurial repo
205 205 [255]
206 206 $ hg lfconvert foo ssh://localhost/foo
207 207 abort: ssh://localhost/foo is not a local Mercurial repo
208 208 [255]
209 209 $ hg lfconvert nosuchrepo foo
210 210 abort: repository nosuchrepo not found!
211 211 [255]
212 212 $ hg share -q -U bigfile-repo shared
213 213 $ printf 'bogus' > shared/.hg/sharedpath
214 214 $ hg lfconvert shared foo
215 215 abort: .hg/sharedpath points to nonexistent directory $TESTTMP/bogus! (glob)
216 216 [255]
217 217 $ hg lfconvert bigfile-repo largefiles-repo
218 218 initializing destination largefiles-repo
219 219 abort: repository largefiles-repo already exists!
220 220 [255]
221 221
222 222 add another largefile to the new largefiles repo
223 223 $ cd largefiles-repo
224 224 $ dd if=/dev/zero bs=1k count=1k > anotherlarge 2> /dev/null
225 225 $ hg add --lfsize=1 anotherlarge
226 226 $ hg commit -m "add anotherlarge (should be a largefile)"
227 227 $ cat .hglf/anotherlarge
228 228 3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
229 229 $ cd ..
230 230
231 231 round-trip: converting back to a normal (non-largefiles) repo with
232 232 "lfconvert --to-normal" should give the same as ../bigfile-repo
233 233 $ cd largefiles-repo
234 234 $ hg lfconvert --to-normal . ../normal-repo
235 235 initializing destination ../normal-repo
236 236 $ cd ../normal-repo
237 237 $ cat >> .hg/hgrc <<EOF
238 238 > [extensions]
239 239 > largefiles = !
240 240 > EOF
241 241
242 242 # Hmmm: the changeset ID for rev 5 is different from the original
243 243 # normal repo (../bigfile-repo), because the changelog filelist
244 244 # differs between the two incarnations of rev 5: this repo includes
245 245 # 'large' in the list, but ../bigfile-repo does not. Since rev 5
246 246 # removes 'large' relative to the first parent in both repos, it seems
247 247 # to me that lfconvert is doing a *better* job than
248 248 # "hg remove" + "hg merge" + "hg commit".
249 249 # $ hg -R ../bigfile-repo debugdata -c 5
250 250 # $ hg debugdata -c 5
251 251 $ hg glog --template "{rev}:{node|short} {desc|firstline}\n"
252 252 o 6:1635824e6f59 add anotherlarge (should be a largefile)
253 253 |
254 254 o 5:7215f8deeaaf merge
255 255 |\
256 256 | o 4:7285f817b77e remove large, normal3
257 257 | |
258 258 | o 3:67e3892e3534 add normal3, modify sub/*
259 259 | |
260 260 o | 2:c96c8beb5d56 rename sub/ to stuff/
261 261 |/
262 262 o 1:020c65d24e11 add sub/*
263 263 |
264 264 o 0:117b8328f97a add large, normal1
265 265
266 266 $ hg update
267 267 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 268 $ hg locate
269 269 anotherlarge
270 270 normal1
271 271 stuff/maybelarge.dat
272 272 stuff/normal2
273 273 $ [ -d .hg/largefiles ] && echo fail || echo pass
274 274 pass
275 275
276 276 $ cd ..
277 277
278 278 Clearing the usercache ensures that commitctx doesn't try to cache largefiles
279 279 from the working dir on a convert.
280 280 $ rm "${USERCACHE}"/*
281 281 $ hg convert largefiles-repo
282 282 assuming destination largefiles-repo-hg
283 283 initializing destination largefiles-repo-hg repository
284 284 scanning source...
285 285 sorting...
286 286 converting...
287 287 6 add large, normal1
288 288 5 add sub/*
289 289 4 rename sub/ to stuff/
290 290 3 add normal3, modify sub/*
291 291 2 remove large, normal3
292 292 1 merge
293 293 0 add anotherlarge (should be a largefile)
294 294
295 295 $ hg -R largefiles-repo-hg glog --template "{rev}:{node|short} {desc|firstline}\n"
296 296 o 6:17126745edfd add anotherlarge (should be a largefile)
297 297 |
298 298 o 5:9cc5aa7204f0 merge
299 299 |\
300 300 | o 4:a5a02de7a8e4 remove large, normal3
301 301 | |
302 302 | o 3:55759520c76f add normal3, modify sub/*
303 303 | |
304 304 o | 2:261ad3f3f037 rename sub/ to stuff/
305 305 |/
306 306 o 1:334e5237836d add sub/*
307 307 |
308 308 o 0:d4892ec57ce2 add large, normal1
309 309
310 310 Verify will fail (for now) if the usercache is purged before converting, since
311 311 largefiles are not cached in the converted repo's local store by the conversion
312 312 process.
313 313 $ hg -R largefiles-repo-hg verify --large --lfa
314 314 checking changesets
315 315 checking manifests
316 316 crosschecking files in changesets and manifests
317 317 checking files
318 318 8 files, 7 changesets, 12 total revisions
319 319 searching 7 changesets for largefiles
320 changeset 0:d4892ec57ce2: large references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/2e000fa7e85759c7f4c254d4d9c33ef481e459a7
321 changeset 1:334e5237836d: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
322 changeset 2:261ad3f3f037: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
323 changeset 3:55759520c76f: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
324 changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38
325 changeset 6:17126745edfd: anotherlarge references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3
320 changeset 0:d4892ec57ce2: large references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/2e000fa7e85759c7f4c254d4d9c33ef481e459a7 (glob)
321 changeset 1:334e5237836d: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c (glob)
322 changeset 2:261ad3f3f037: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c (glob)
323 changeset 3:55759520c76f: sub/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38 (glob)
324 changeset 5:9cc5aa7204f0: stuff/maybelarge.dat references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/76236b6a2c6102826c61af4297dd738fb3b1de38 (glob)
325 changeset 6:17126745edfd: anotherlarge references missing $TESTTMP/largefiles-repo-hg/.hg/largefiles/3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3 (glob)
326 326 verified existence of 6 revisions of 4 largefiles
327 327 [1]
328 328 $ hg -R largefiles-repo-hg showconfig paths
329 329
330 330
331 331 Avoid a traceback if a largefile isn't available (issue3519)
332 332
333 333 Ensure the largefile can be cached in the source if necessary
334 334 $ hg clone -U largefiles-repo issue3519
335 335 $ rm -f "${USERCACHE}"/*
336 336 $ hg lfconvert --to-normal issue3519 normalized3519
337 337 initializing destination normalized3519
338 338
339 339 Ensure the abort message is useful if a largefile is entirely unavailable
340 340 $ rm -rf normalized3519
341 341 $ rm "${USERCACHE}"/*
342 342 $ rm issue3519/.hg/largefiles/*
343 343 $ rm largefiles-repo/.hg/largefiles/*
344 344 $ hg lfconvert --to-normal issue3519 normalized3519
345 345 initializing destination normalized3519
346 346 error getting id 2e000fa7e85759c7f4c254d4d9c33ef481e459a7 from url file:$TESTTMP/largefiles-repo for file large: can't get file locally (glob)
347 347 abort: missing largefile 'large' from revision d4892ec57ce212905215fad1d9018f56b99202ad
348 348 [255]
349 349
350 350
General Comments 0
You need to be logged in to leave comments. Login now