/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transform.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import os
18
18
 
 
19
from bzrlib import tests
19
20
from bzrlib.bzrdir import BzrDir
20
21
from bzrlib.conflicts import (DuplicateEntry, DuplicateID, MissingParent,
21
22
                              UnversionedParent, ParentLoop)
720
721
        self.assertIs(os.path.lexists(this.wt.abspath('b/h1.OTHER')), False)
721
722
        self.assertEqual(this.wt.id2path('i'), pathjoin('b/i1.OTHER'))
722
723
 
723
 
class TestBuildTree(TestCaseInTempDir):
 
724
class TestBuildTree(tests.TestCaseWithTransport):
 
725
 
724
726
    def test_build_tree(self):
725
727
        if not has_symlinks():
726
728
            raise TestSkipped('Test requires symlink support')
736
738
        self.assertIs(os.path.isdir('b/foo'), True)
737
739
        self.assertEqual(file('b/foo/bar', 'rb').read(), "contents")
738
740
        self.assertEqual(os.readlink('b/foo/baz'), 'a/foo/bar')
 
741
 
 
742
    def test_file_conflict_handling(self):
 
743
        """Ensure that when building trees, conflict handling is done"""
 
744
        source = self.make_branch_and_tree('source')
 
745
        target = self.make_branch_and_tree('target')
 
746
        self.build_tree(['source/file', 'target/file'])
 
747
        source.add('file', 'new-file')
 
748
        source.commit('added file')
 
749
        build_tree(source.basis_tree(), target)
 
750
        self.assertEqual([DuplicateEntry('Moved existing file to',
 
751
                          'file.moved', 'file', None, 'new-file')],
 
752
                         target.conflicts())
 
753
        target2 = self.make_branch_and_tree('target2')
 
754
        target_file = file('target2/file', 'wb')
 
755
        try:
 
756
            source_file = file('source/file', 'rb')
 
757
            try:
 
758
                target_file.write(source_file.read())
 
759
            finally:
 
760
                source_file.close()
 
761
        finally:
 
762
            target_file.close()
 
763
        build_tree(source.basis_tree(), target2)
 
764
        self.assertEqual([], target2.conflicts())
 
765
 
 
766
    def test_symlink_conflict_handling(self):
 
767
        """Ensure that when building trees, conflict handling is done"""
 
768
        if not has_symlinks():
 
769
            raise TestSkipped('Test requires symlink support')
 
770
        source = self.make_branch_and_tree('source')
 
771
        os.symlink('foo', 'source/symlink')
 
772
        source.add('symlink', 'new-symlink')
 
773
        source.commit('added file')
 
774
        target = self.make_branch_and_tree('target')
 
775
        os.symlink('bar', 'target/symlink')
 
776
        build_tree(source.basis_tree(), target)
 
777
        self.assertEqual([DuplicateEntry('Moved existing file to',
 
778
            'symlink.moved', 'symlink', None, 'new-symlink')],
 
779
            target.conflicts())
 
780
        target = self.make_branch_and_tree('target2')
 
781
        os.symlink('foo', 'target2/symlink')
 
782
        build_tree(source.basis_tree(), target)
 
783
        self.assertEqual([], target.conflicts())
739
784
        
 
785
    def test_directory_conflict_handling(self):
 
786
        """Ensure that when building trees, conflict handling is done"""
 
787
        source = self.make_branch_and_tree('source')
 
788
        target = self.make_branch_and_tree('target')
 
789
        self.build_tree(['source/dir1/', 'source/dir1/file', 'target/dir1/'])
 
790
        source.add(['dir1', 'dir1/file'], ['new-dir1', 'new-file'])
 
791
        source.commit('added file')
 
792
        build_tree(source.basis_tree(), target)
 
793
        self.assertEqual([], target.conflicts())
 
794
        self.failUnlessExists('target/dir1/file')
 
795
 
 
796
        # Ensure contents are merged
 
797
        target = self.make_branch_and_tree('target2')
 
798
        self.build_tree(['target2/dir1/', 'target2/dir1/file2'])
 
799
        build_tree(source.basis_tree(), target)
 
800
        self.assertEqual([], target.conflicts())
 
801
        self.failUnlessExists('target2/dir1/file2')
 
802
        self.failUnlessExists('target2/dir1/file')
 
803
 
 
804
        # Ensure new contents are suppressed for existing branches
 
805
        target = self.make_branch_and_tree('target3')
 
806
        self.make_branch('target3/dir1')
 
807
        self.build_tree(['target3/dir1/file2'])
 
808
        build_tree(source.basis_tree(), target)
 
809
        self.failIfExists('target3/dir1/file')
 
810
        self.failUnlessExists('target3/dir1/file2')
 
811
        self.failUnlessExists('target3/dir1.diverted/file')
 
812
        self.assertEqual([DuplicateEntry('Diverted to',
 
813
            'dir1.diverted', 'dir1', 'new-dir1', None)],
 
814
            target.conflicts())
 
815
 
 
816
        target = self.make_branch_and_tree('target4')
 
817
        self.build_tree(['target4/dir1/'])
 
818
        self.make_branch('target4/dir1/file')
 
819
        build_tree(source.basis_tree(), target)
 
820
        self.failUnlessExists('target4/dir1/file')
 
821
        self.assertEqual('directory', file_kind('target4/dir1/file'))
 
822
        self.failUnlessExists('target4/dir1/file.diverted')
 
823
        self.assertEqual([DuplicateEntry('Diverted to',
 
824
            'dir1/file.diverted', 'dir1/file', 'new-file', None)],
 
825
            target.conflicts())
 
826
 
 
827
    def test_mixed_conflict_handling(self):
 
828
        """Ensure that when building trees, conflict handling is done"""
 
829
        source = self.make_branch_and_tree('source')
 
830
        target = self.make_branch_and_tree('target')
 
831
        self.build_tree(['source/name', 'target/name/'])
 
832
        source.add('name', 'new-name')
 
833
        source.commit('added file')
 
834
        build_tree(source.basis_tree(), target)
 
835
        self.assertEqual([DuplicateEntry('Moved existing file to',
 
836
            'name.moved', 'name', None, 'new-name')], target.conflicts())
 
837
 
 
838
    def test_raises_in_populated(self):
 
839
        source = self.make_branch_and_tree('source')
 
840
        self.build_tree(['source/name'])
 
841
        source.add('name')
 
842
        source.commit('added name')
 
843
        target = self.make_branch_and_tree('target')
 
844
        self.build_tree(['target/name'])
 
845
        target.add('name')
 
846
        self.assertRaises(AssertionError, build_tree, source.basis_tree(),
 
847
                          target)
 
848
 
 
849
 
740
850
class MockTransform(object):
741
851
 
742
852
    def has_named_child(self, by_parent, parent_id, name):