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')
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')],
753
target2 = self.make_branch_and_tree('target2')
754
target_file = file('target2/file', 'wb')
756
source_file = file('source/file', 'rb')
758
target_file.write(source_file.read())
763
build_tree(source.basis_tree(), target2)
764
self.assertEqual([], target2.conflicts())
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')],
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())
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')
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')
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)],
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)],
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())
838
def test_raises_in_populated(self):
839
source = self.make_branch_and_tree('source')
840
self.build_tree(['source/name'])
842
source.commit('added name')
843
target = self.make_branch_and_tree('target')
844
self.build_tree(['target/name'])
846
self.assertRaises(AssertionError, build_tree, source.basis_tree(),
740
850
class MockTransform(object):
742
852
def has_named_child(self, by_parent, parent_id, name):