39
39
find_interesting, build_tree, get_backup_name)
42
class TestTreeTransform(TestCaseInTempDir):
42
class TestTreeTransform(tests.TestCaseWithTransport):
45
45
super(TestTreeTransform, self).setUp()
46
self.wt = BzrDir.create_standalone_workingtree('.')
46
self.wt = self.make_branch_and_tree('.', format='experimental-knit3')
49
49
def get_transform(self):
130
130
self.wt.get_file_byname('oz/dorothy/toto').read())
131
131
self.assertIs(self.wt.is_executable('toto-id'), False)
133
def test_tree_reference(self):
134
transform, root = self.get_transform()
135
tree = transform._tree
136
trans_id = transform.new_directory('reference', root, 'subtree-id')
137
transform.set_tree_reference('subtree-revision', trans_id)
139
self.assertEqual('subtree-revision',
140
tree.inventory['subtree-id'].reference_revision)
133
142
def test_conflicts(self):
134
143
transform, root = self.get_transform()
135
144
trans_id = transform.new_file('name', root, 'contents',
588
597
self.assertEqual([bar1_abspath], stat_paths)
590
599
def test_iter_changes(self):
600
self.wt.set_root_id('eert_toor')
591
601
transform, root = self.get_transform()
592
602
transform.new_file('old', root, 'blah', 'id-1', True)
593
603
transform.apply()
597
607
old = transform.trans_id_tree_file_id('id-1')
598
608
transform.unversion_file(old)
599
609
self.assertEqual([('id-1', 'old', False, (True, False),
600
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
610
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
601
611
(True, True))], list(transform._iter_changes()))
602
612
transform.new_directory('new', root, 'id-1')
603
613
self.assertEqual([('id-1', 'new', True, (True, True),
604
('TREE_ROOT', 'TREE_ROOT'), ('old', 'new'),
614
('eert_toor', 'eert_toor'), ('old', 'new'),
605
615
('file', 'directory'),
606
616
(True, False))], list(transform._iter_changes()))
608
618
transform.finalize()
610
620
def test_iter_changes_new(self):
621
self.wt.set_root_id('eert_toor')
611
622
transform, root = self.get_transform()
612
623
transform.new_file('old', root, 'blah')
613
624
transform.apply()
616
627
old = transform.trans_id_tree_path('old')
617
628
transform.version_file('id-1', old)
618
629
self.assertEqual([('id-1', 'old', False, (False, True),
619
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
630
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
620
631
(False, False))], list(transform._iter_changes()))
622
633
transform.finalize()
624
635
def test_iter_changes_modifications(self):
636
self.wt.set_root_id('eert_toor')
625
637
transform, root = self.get_transform()
626
638
transform.new_file('old', root, 'blah', 'id-1')
627
639
transform.new_file('new', root, 'blah')
637
649
#content deletion
638
650
transform.delete_contents(old)
639
651
self.assertEqual([('id-1', 'old', True, (True, True),
640
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', None),
652
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', None),
641
653
(False, False))], list(transform._iter_changes()))
644
656
transform.create_file('blah', old)
645
657
self.assertEqual([('id-1', 'old', True, (True, True),
646
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
658
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
647
659
(False, False))], list(transform._iter_changes()))
648
660
transform.cancel_deletion(old)
649
661
self.assertEqual([('id-1', 'old', True, (True, True),
650
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
662
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
651
663
(False, False))], list(transform._iter_changes()))
652
664
transform.cancel_creation(old)
657
669
transform.version_file('id-1', new)
658
670
transform.adjust_path('old', root, new)
659
671
self.assertEqual([('id-1', 'old', True, (True, True),
660
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
672
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
661
673
(False, False))], list(transform._iter_changes()))
662
674
transform.cancel_versioning(new)
663
675
transform._removed_id = set()
666
678
self.assertEqual([], list(transform._iter_changes()))
667
679
transform.set_executability(True, old)
668
680
self.assertEqual([('id-1', 'old', False, (True, True),
669
('TREE_ROOT', 'TREE_ROOT'), ('old', 'old'), ('file', 'file'),
681
('eert_toor', 'eert_toor'), ('old', 'old'), ('file', 'file'),
670
682
(False, True))], list(transform._iter_changes()))
671
683
transform.set_executability(None, old)
675
687
transform.adjust_path('new', root, old)
676
688
transform._new_parent = {}
677
689
self.assertEqual([('id-1', 'new', False, (True, True),
678
('TREE_ROOT', 'TREE_ROOT'), ('old', 'new'), ('file', 'file'),
690
('eert_toor', 'eert_toor'), ('old', 'new'), ('file', 'file'),
679
691
(False, False))], list(transform._iter_changes()))
680
692
transform._new_name = {}
684
696
transform.adjust_path('new', subdir, old)
685
697
transform._new_name = {}
686
698
self.assertEqual([('id-1', 'subdir/old', False, (True, True),
687
('TREE_ROOT', 'subdir-id'), ('old', 'old'), ('file', 'file'),
699
('eert_toor', 'subdir-id'), ('old', 'old'), ('file', 'file'),
688
700
(False, False))], list(transform._iter_changes()))
689
701
transform._new_path = {}
692
704
transform.finalize()
694
706
def test_iter_changes_modified_bleed(self):
707
self.wt.set_root_id('eert_toor')
695
708
"""Modified flag should not bleed from one change to another"""
696
709
# unfortunately, we have no guarantee that file1 (which is modified)
697
710
# will be applied before file2. And if it's applied after file2, it
707
720
transform.set_executability(True,
708
721
transform.trans_id_file_id('id-2'))
709
722
self.assertEqual([('id-1', u'file1', True, (True, True),
710
('TREE_ROOT', 'TREE_ROOT'), ('file1', u'file1'),
723
('eert_toor', 'eert_toor'), ('file1', u'file1'),
711
724
('file', None), (False, False)),
712
725
('id-2', u'file2', False, (True, True),
713
('TREE_ROOT', 'TREE_ROOT'), ('file2', u'file2'),
726
('eert_toor', 'eert_toor'), ('file2', u'file2'),
714
727
('file', 'file'), (False, True))],
715
728
list(transform._iter_changes()))
719
732
def test_iter_changes_pointless(self):
720
733
"""Ensure that no-ops are not treated as modifications"""
734
self.wt.set_root_id('eert_toor')
721
735
transform, root = self.get_transform()
722
736
transform.new_file('old', root, 'blah', 'id-1')
723
737
transform.new_directory('subdir', root, 'subdir-id')
957
971
self.assertEqual(file('b/foo/bar', 'rb').read(), "contents")
958
972
self.assertEqual(os.readlink('b/foo/baz'), 'a/foo/bar')
974
def test_build_with_references(self):
975
tree = self.make_branch_and_tree('source', format='experimental-knit3')
976
subtree = self.make_branch_and_tree('source/subtree',
977
format='experimental-knit3')
978
tree.add_reference(subtree)
979
tree.commit('a revision')
980
tree.branch.create_checkout('target')
981
self.failUnlessExists('target')
982
self.failUnlessExists('target/subtree')
960
984
def test_file_conflict_handling(self):
961
985
"""Ensure that when building trees, conflict handling is done"""
962
986
source = self.make_branch_and_tree('source')