Show More
@@ -15,6 +15,7 b' from . import (' | |||
|
15 | 15 | match as matchmod, |
|
16 | 16 | node, |
|
17 | 17 | pathutil, |
|
18 | phases, | |
|
18 | 19 | scmutil, |
|
19 | 20 | util, |
|
20 | 21 | ) |
@@ -367,10 +368,27 b' def mergecopies(repo, c1, c2, base):' | |||
|
367 | 368 | if copytracing == 'off': |
|
368 | 369 | return {}, {}, {}, {}, {} |
|
369 | 370 | elif copytracing == 'heuristics': |
|
371 | # Do full copytracing if only drafts are involved as that will be fast | |
|
372 | # enough and will also cover the copies which can be missed by | |
|
373 | # heuristics | |
|
374 | if _isfullcopytraceable(c1, base): | |
|
375 | return _fullcopytracing(repo, c1, c2, base) | |
|
370 | 376 | return _heuristicscopytracing(repo, c1, c2, base) |
|
371 | 377 | else: |
|
372 | 378 | return _fullcopytracing(repo, c1, c2, base) |
|
373 | 379 | |
|
380 | def _isfullcopytraceable(c1, base): | |
|
381 | """ Checks that if base, source and destination are all draft branches, if | |
|
382 | yes let's use the full copytrace algorithm for increased capabilities since | |
|
383 | it will be fast enough. | |
|
384 | """ | |
|
385 | ||
|
386 | nonpublicphases = set([phases.draft, phases.secret]) | |
|
387 | ||
|
388 | if (c1.phase() in nonpublicphases) and (base.phase() in nonpublicphases): | |
|
389 | return True | |
|
390 | return False | |
|
391 | ||
|
374 | 392 | def _fullcopytracing(repo, c1, c2, base): |
|
375 | 393 | """ The full copytracing algorithm which finds all the new files that were |
|
376 | 394 | added from merge base up to the top commit and for each file it checks if |
@@ -589,3 +589,79 b' Test shelve/unshelve' | |||
|
589 | 589 | $ cd .. |
|
590 | 590 | $ rm -rf server |
|
591 | 591 | $ rm -rf repo |
|
592 | ||
|
593 | Test full copytrace ability on draft branch | |
|
594 | ------------------------------------------- | |
|
595 | ||
|
596 | File directory and base name changed in same move | |
|
597 | $ hg init repo | |
|
598 | $ initclient repo | |
|
599 | $ mkdir repo/dir1 | |
|
600 | $ cd repo/dir1 | |
|
601 | $ echo a > a | |
|
602 | $ hg add a | |
|
603 | $ hg ci -qm initial | |
|
604 | $ cd .. | |
|
605 | $ hg mv -q dir1 dir2 | |
|
606 | $ hg mv dir2/a dir2/b | |
|
607 | $ hg ci -qm 'mv a b; mv dir1 dir2' | |
|
608 | $ hg up -q '.^' | |
|
609 | $ cd dir1 | |
|
610 | $ echo b >> a | |
|
611 | $ cd .. | |
|
612 | $ hg ci -qm 'mod a' | |
|
613 | ||
|
614 | $ hg log -G -T 'changeset {node}\n desc {desc}, phase: {phase}\n' | |
|
615 | @ changeset 6207d2d318e710b882e3d5ada2a89770efc42c96 | |
|
616 | | desc mod a, phase: draft | |
|
617 | | o changeset abffdd4e3dfc04bc375034b970299b2a309a1cce | |
|
618 | |/ desc mv a b; mv dir1 dir2, phase: draft | |
|
619 | o changeset 81973cd24b58db2fdf18ce3d64fb2cc3284e9ab3 | |
|
620 | desc initial, phase: draft | |
|
621 | ||
|
622 | $ hg rebase -s . -d 1 | |
|
623 | rebasing 2:6207d2d318e7 "mod a" (tip) | |
|
624 | merging dir2/b and dir1/a to dir2/b | |
|
625 | saved backup bundle to $TESTTMP/repo/repo/.hg/strip-backup/6207d2d318e7-1c9779ad-rebase.hg (glob) | |
|
626 | $ cat dir2/b | |
|
627 | a | |
|
628 | b | |
|
629 | $ cd .. | |
|
630 | $ rm -rf server | |
|
631 | $ rm -rf repo | |
|
632 | ||
|
633 | Move directory in one merge parent, while adding file to original directory | |
|
634 | in other merge parent. File moved on rebase. | |
|
635 | $ hg init repo | |
|
636 | $ initclient repo | |
|
637 | $ mkdir repo/dir1 | |
|
638 | $ cd repo/dir1 | |
|
639 | $ echo dummy > dummy | |
|
640 | $ hg add dummy | |
|
641 | $ cd .. | |
|
642 | $ hg ci -qm initial | |
|
643 | $ cd dir1 | |
|
644 | $ echo a > a | |
|
645 | $ hg add a | |
|
646 | $ cd .. | |
|
647 | $ hg ci -qm 'hg add dir1/a' | |
|
648 | $ hg up -q '.^' | |
|
649 | $ hg mv -q dir1 dir2 | |
|
650 | $ hg ci -qm 'mv dir1 dir2' | |
|
651 | ||
|
652 | $ hg log -G -T 'changeset {node}\n desc {desc}, phase: {phase}\n' | |
|
653 | @ changeset e8919e7df8d036e07b906045eddcd4a42ff1915f | |
|
654 | | desc mv dir1 dir2, phase: draft | |
|
655 | | o changeset 7c7c6f339be00f849c3cb2df738ca91db78b32c8 | |
|
656 | |/ desc hg add dir1/a, phase: draft | |
|
657 | o changeset a235dcce55dcf42034c4e374cb200662d0bb4a13 | |
|
658 | desc initial, phase: draft | |
|
659 | ||
|
660 | $ hg rebase -s . -d 1 | |
|
661 | rebasing 2:e8919e7df8d0 "mv dir1 dir2" (tip) | |
|
662 | saved backup bundle to $TESTTMP/repo/repo/.hg/strip-backup/e8919e7df8d0-f62fab62-rebase.hg (glob) | |
|
663 | $ ls dir2 | |
|
664 | a | |
|
665 | dummy | |
|
666 | $ rm -rf server | |
|
667 | $ rm -rf repo |
General Comments 0
You need to be logged in to leave comments.
Login now