53
53
resolve_conflicts, cook_conflicts,
54
54
build_tree, get_backup_name,
55
55
_FileMover, resolve_checkout,
56
TransformPreview, create_from_tree)
58
58
class TestTreeTransform(tests.TestCaseWithTransport):
1313
1313
transform.cancel_creation(trans_id)
1314
1314
transform.apply()
1316
def test_create_from_tree(self):
1317
tree1 = self.make_branch_and_tree('tree1')
1318
self.build_tree_contents([('tree1/foo/',), ('tree1/bar', 'baz')])
1319
tree1.add(['foo', 'bar'], ['foo-id', 'bar-id'])
1320
tree2 = self.make_branch_and_tree('tree2')
1321
tt = TreeTransform(tree2)
1322
foo_trans_id = tt.create_path('foo', tt.root)
1323
create_from_tree(tt, foo_trans_id, tree1, 'foo-id')
1324
bar_trans_id = tt.create_path('bar', tt.root)
1325
create_from_tree(tt, bar_trans_id, tree1, 'bar-id')
1327
self.assertEqual('directory', osutils.file_kind('tree2/foo'))
1328
self.assertFileEqual('baz', 'tree2/bar')
1330
def test_create_from_tree_bytes(self):
1331
"""Provided lines are used instead of tree content."""
1332
tree1 = self.make_branch_and_tree('tree1')
1333
self.build_tree_contents([('tree1/foo', 'bar'),])
1334
tree1.add('foo', 'foo-id')
1335
tree2 = self.make_branch_and_tree('tree2')
1336
tt = TreeTransform(tree2)
1337
foo_trans_id = tt.create_path('foo', tt.root)
1338
create_from_tree(tt, foo_trans_id, tree1, 'foo-id', bytes='qux')
1340
self.assertFileEqual('qux', 'tree2/foo')
1342
def test_create_from_tree_symlink(self):
1343
self.requireFeature(SymlinkFeature)
1344
tree1 = self.make_branch_and_tree('tree1')
1345
os.symlink('bar', 'tree1/foo')
1346
tree1.add('foo', 'foo-id')
1347
tt = TreeTransform(self.make_branch_and_tree('tree2'))
1348
foo_trans_id = tt.create_path('foo', tt.root)
1349
create_from_tree(tt, foo_trans_id, tree1, 'foo-id')
1351
self.assertEqual('bar', os.readlink('tree2/foo'))
1317
1354
class TransformGroup(object):
1976
2013
resolve_conflicts(tt)
2016
A_ENTRY = ('a-id', ('a', 'a'), True, (True, True),
2017
('TREE_ROOT', 'TREE_ROOT'), ('a', 'a'), ('file', 'file'),
2019
ROOT_ENTRY = ('TREE_ROOT', ('', ''), False, (True, True), (None, None),
2020
('', ''), ('directory', 'directory'), (False, None))
1979
2023
class TestTransformPreview(tests.TestCaseWithTransport):
1981
2025
def create_tree(self):
2053
2097
(False, False))],
2054
2098
list(preview_tree.iter_changes(revision_tree)))
2056
def test_include_unchanged_value_error(self):
2100
def test_include_unchanged_succeeds(self):
2057
2101
revision_tree, preview_tree = self.get_tree_and_preview_tree()
2058
e = self.assertRaises(ValueError, preview_tree.iter_changes,
2059
revision_tree, include_unchanged=True)
2060
self.assertEqual('include_unchanged is not supported', str(e))
2102
changes = preview_tree.iter_changes(revision_tree,
2103
include_unchanged=True)
2104
root = revision_tree.inventory.root.file_id
2106
self.assertEqual([ROOT_ENTRY, A_ENTRY], list(changes))
2062
2108
def test_specific_files(self):
2063
2109
revision_tree, preview_tree = self.get_tree_and_preview_tree()
2064
e = self.assertRaises(ValueError, preview_tree.iter_changes,
2065
revision_tree, specific_files=['pete'])
2066
self.assertEqual('specific_files is not supported', str(e))
2110
changes = preview_tree.iter_changes(revision_tree,
2111
specific_files=[''])
2112
self.assertEqual([ROOT_ENTRY, A_ENTRY], list(changes))
2068
def test_want_unversioned_value_error(self):
2114
def test_want_unversioned(self):
2069
2115
revision_tree, preview_tree = self.get_tree_and_preview_tree()
2070
e = self.assertRaises(ValueError, preview_tree.iter_changes,
2071
revision_tree, want_unversioned=True)
2072
self.assertEqual('want_unversioned is not supported', str(e))
2116
changes = preview_tree.iter_changes(revision_tree,
2117
want_unversioned=True)
2118
self.assertEqual([ROOT_ENTRY, A_ENTRY], list(changes))
2074
2120
def test_ignore_extra_trees_no_specific_files(self):
2075
2121
# extra_trees is harmless without specific_files, so we'll silently
2497
2543
self.addCleanup(tt.finalize)
2498
2544
final_tree = tt.get_preview_tree()
2499
2545
self.assertEqual('a\nb\nc\n', final_tree.get_file_text('file-id'))
2547
def test_merge_preview_into_workingtree(self):
2548
tree = self.make_branch_and_tree('tree')
2549
tt = TransformPreview(tree)
2550
self.addCleanup(tt.finalize)
2551
tt.new_file('name', tt.root, 'content', 'file-id')
2552
tree2 = self.make_branch_and_tree('tree2')
2553
pb = progress.DummyProgress()
2554
merger = Merger.from_uncommitted(tree2, tt.get_preview_tree(),
2555
pb, tree.basis_tree())
2556
merger.merge_type = Merge3Merger
2559
def test_merge_preview_into_workingtree_handles_conflicts(self):
2560
tree = self.make_branch_and_tree('tree')
2561
self.build_tree_contents([('tree/foo', 'bar')])
2562
tree.add('foo', 'foo-id')
2564
tt = TransformPreview(tree)
2565
self.addCleanup(tt.finalize)
2566
trans_id = tt.trans_id_file_id('foo-id')
2567
tt.delete_contents(trans_id)
2568
tt.create_file('baz', trans_id)
2569
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
2570
self.build_tree_contents([('tree2/foo', 'qux')])
2571
pb = progress.DummyProgress()
2572
merger = Merger.from_uncommitted(tree2, tt.get_preview_tree(),
2573
pb, tree.basis_tree())
2574
merger.merge_type = Merge3Merger
2577
def test_is_executable(self):
2578
tree = self.make_branch_and_tree('tree')
2579
preview = TransformPreview(tree)
2580
self.addCleanup(preview.finalize)
2581
preview.new_file('foo', preview.root, 'bar', 'baz-id')
2582
preview_tree = preview.get_preview_tree()
2583
self.assertEqual(False, preview_tree.is_executable('baz-id',
2585
self.assertEqual(False, preview_tree.is_executable('baz-id'))