/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

  • Committer: Andrew Bennetts
  • Date: 2008-10-27 06:14:45 UTC
  • mfrom: (3793 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3795.
  • Revision ID: andrew.bennetts@canonical.com-20081027061445-eqt9lz6uw1mbvq4g
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
                           ExistingPendingDeletion, ImmortalLimbo,
41
41
                           ImmortalPendingDeletion, LockError)
42
42
from bzrlib.osutils import file_kind, pathjoin
43
 
from bzrlib.merge import Merge3Merger
 
43
from bzrlib.merge import Merge3Merger, Merger
44
44
from bzrlib.tests import (
45
45
    CaseInsensitiveFilesystemFeature,
46
46
    HardlinkFeature,
53
53
                              resolve_conflicts, cook_conflicts, 
54
54
                              build_tree, get_backup_name,
55
55
                              _FileMover, resolve_checkout,
56
 
                              TransformPreview)
 
56
                              TransformPreview, create_from_tree)
57
57
 
58
58
class TestTreeTransform(tests.TestCaseWithTransport):
59
59
 
1313
1313
        transform.cancel_creation(trans_id)
1314
1314
        transform.apply()
1315
1315
 
 
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')
 
1326
        tt.apply()
 
1327
        self.assertEqual('directory', osutils.file_kind('tree2/foo'))
 
1328
        self.assertFileEqual('baz', 'tree2/bar')
 
1329
 
 
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')
 
1339
        tt.apply()
 
1340
        self.assertFileEqual('qux', 'tree2/foo')
 
1341
 
 
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')
 
1350
        tt.apply()
 
1351
        self.assertEqual('bar', os.readlink('tree2/foo'))
 
1352
 
1316
1353
 
1317
1354
class TransformGroup(object):
1318
1355
 
1976
2013
        resolve_conflicts(tt)
1977
2014
 
1978
2015
 
 
2016
A_ENTRY = ('a-id', ('a', 'a'), True, (True, True),
 
2017
                  ('TREE_ROOT', 'TREE_ROOT'), ('a', 'a'), ('file', 'file'),
 
2018
                  (False, False))
 
2019
ROOT_ENTRY = ('TREE_ROOT', ('', ''), False, (True, True), (None, None),
 
2020
              ('', ''), ('directory', 'directory'), (False, None))
 
2021
 
 
2022
 
1979
2023
class TestTransformPreview(tests.TestCaseWithTransport):
1980
2024
 
1981
2025
    def create_tree(self):
2053
2097
                          (False, False))],
2054
2098
                          list(preview_tree.iter_changes(revision_tree)))
2055
2099
 
2056
 
    def test_wrong_tree_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
 
                              preview_tree)
2060
 
        self.assertEqual('from_tree must be transform source tree.', str(e))
 
2102
        changes = preview_tree.iter_changes(revision_tree,
 
2103
                                            include_unchanged=True)
 
2104
        root = revision_tree.inventory.root.file_id
2061
2105
 
2062
 
    def test_include_unchanged_value_error(self):
2063
 
        revision_tree, preview_tree = self.get_tree_and_preview_tree()
2064
 
        e = self.assertRaises(ValueError, preview_tree.iter_changes,
2065
 
                              revision_tree, include_unchanged=True)
2066
 
        self.assertEqual('include_unchanged is not supported', str(e))
 
2106
        self.assertEqual([ROOT_ENTRY, A_ENTRY], list(changes))
2067
2107
 
2068
2108
    def test_specific_files(self):
2069
2109
        revision_tree, preview_tree = self.get_tree_and_preview_tree()
2070
 
        e = self.assertRaises(ValueError, preview_tree.iter_changes,
2071
 
                              revision_tree, specific_files=['pete'])
2072
 
        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))
2073
2113
 
2074
 
    def test_want_unversioned_value_error(self):
 
2114
    def test_want_unversioned(self):
2075
2115
        revision_tree, preview_tree = self.get_tree_and_preview_tree()
2076
 
        e = self.assertRaises(ValueError, preview_tree.iter_changes,
2077
 
                              revision_tree, want_unversioned=True)
2078
 
        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))
2079
2119
 
2080
2120
    def test_ignore_extra_trees_no_specific_files(self):
2081
2121
        # extra_trees is harmless without specific_files, so we'll silently
2459
2499
        expected = [(('', 'tree-root'),
2460
2500
                    [('a', 'a', 'file', None, 'a-id', 'file')])]
2461
2501
        self.assertEqual(expected, list(preview_tree.walkdirs()))
 
2502
 
 
2503
    def test_extras(self):
 
2504
        work_tree = self.make_branch_and_tree('tree')
 
2505
        self.build_tree(['tree/removed-file', 'tree/existing-file',
 
2506
                         'tree/not-removed-file'])
 
2507
        work_tree.add(['removed-file', 'not-removed-file'])
 
2508
        preview = TransformPreview(work_tree)
 
2509
        self.addCleanup(preview.finalize)
 
2510
        preview.new_file('new-file', preview.root, 'contents')
 
2511
        preview.new_file('new-versioned-file', preview.root, 'contents',
 
2512
                         'new-versioned-id')
 
2513
        tree = preview.get_preview_tree()
 
2514
        preview.unversion_file(preview.trans_id_tree_path('removed-file'))
 
2515
        self.assertEqual(set(['new-file', 'removed-file', 'existing-file']),
 
2516
                         set(tree.extras()))
 
2517
 
 
2518
    def test_merge_into_preview(self):
 
2519
        work_tree = self.make_branch_and_tree('tree')
 
2520
        self.build_tree_contents([('tree/file','b\n')])
 
2521
        work_tree.add('file', 'file-id')
 
2522
        work_tree.commit('first commit')
 
2523
        child_tree = work_tree.bzrdir.sprout('child').open_workingtree()
 
2524
        self.build_tree_contents([('child/file','b\nc\n')])
 
2525
        child_tree.commit('child commit')
 
2526
        child_tree.lock_write()
 
2527
        self.addCleanup(child_tree.unlock)
 
2528
        work_tree.lock_write()
 
2529
        self.addCleanup(work_tree.unlock)
 
2530
        preview = TransformPreview(work_tree)
 
2531
        self.addCleanup(preview.finalize)
 
2532
        preview_tree = preview.get_preview_tree()
 
2533
        file_trans_id = preview.trans_id_file_id('file-id')
 
2534
        preview.delete_contents(file_trans_id)
 
2535
        preview.create_file('a\nb\n', file_trans_id)
 
2536
        pb = progress.DummyProgress()
 
2537
        merger = Merger.from_revision_ids(pb, preview_tree,
 
2538
                                          child_tree.branch.last_revision(),
 
2539
                                          other_branch=child_tree.branch,
 
2540
                                          tree_branch=work_tree.branch)
 
2541
        merger.merge_type = Merge3Merger
 
2542
        tt = merger.make_merger().make_preview_transform()
 
2543
        self.addCleanup(tt.finalize)
 
2544
        final_tree = tt.get_preview_tree()
 
2545
        self.assertEqual('a\nb\nc\n', final_tree.get_file_text('file-id'))
 
2546
 
 
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
 
2557
        merger.do_merge()
 
2558
 
 
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')
 
2563
        tree.commit('foo')
 
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
 
2575
        merger.do_merge()
 
2576
 
 
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',
 
2584
                                                           'tree/foo'))
 
2585
        self.assertEqual(False, preview_tree.is_executable('baz-id'))