~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge.py

  • Committer: Patch Queue Manager
  • Date: 2015-12-17 18:39:00 UTC
  • mfrom: (6606.1.2 fix-float)
  • Revision ID: pqm@pqm.ubuntu.com-20151217183900-0719du2uv1kwu3lc
(vila) Inline testtools private method to fix an issue in xenial (the
 private implementation has changed in an backward incompatible way).
 (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2012 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
83
83
        tip = wt1.commit('empty commit')
84
84
        wt2 = self.make_branch_and_tree('branch2')
85
85
        wt2.pull(wt1.branch)
86
 
        file('branch1/foo', 'wb').write('foo')
87
 
        file('branch1/bar', 'wb').write('bar')
 
86
        with file('branch1/foo', 'wb') as f:
 
87
            f.write('foo')
 
88
        with file('branch1/bar', 'wb') as f:
 
89
            f.write('bar')
88
90
        wt1.add('foo')
89
91
        wt1.add('bar')
90
92
        wt1.commit('add foobar')
91
 
        os.chdir('branch2')
92
 
        self.run_bzr('merge ../branch1/baz', retcode=3)
93
 
        self.run_bzr('merge ../branch1/foo')
94
 
        self.assertPathExists('foo')
95
 
        self.assertPathDoesNotExist('bar')
96
 
        wt2 = WorkingTree.open('.') # opens branch2
 
93
        self.run_bzr('merge ../branch1/baz', retcode=3, working_dir='branch2')
 
94
        self.run_bzr('merge ../branch1/foo', working_dir='branch2')
 
95
        self.assertPathExists('branch2/foo')
 
96
        self.assertPathDoesNotExist('branch2/bar')
 
97
        wt2 = WorkingTree.open('branch2')
97
98
        self.assertEqual([tip], wt2.get_parent_ids())
98
99
 
99
100
    def test_pending_with_null(self):
151
152
    def test_create_rename(self):
152
153
        """Rename an inventory entry while creating the file"""
153
154
        tree =self.make_branch_and_tree('.')
154
 
        file('name1', 'wb').write('Hello')
 
155
        with file('name1', 'wb') as f: f.write('Hello')
155
156
        tree.add('name1')
156
157
        tree.commit(message="hello")
157
158
        tree.rename_one('name1', 'name2')
164
165
        os.mkdir('dirname1')
165
166
        tree.add('dirname1')
166
167
        filename = pathjoin('dirname1', 'name1')
167
 
        file(filename, 'wb').write('Hello')
 
168
        with file(filename, 'wb') as f: f.write('Hello')
168
169
        tree.add(filename)
169
170
        tree.commit(message="hello")
170
171
        filename2 = pathjoin('dirname1', 'name2')
226
227
 
227
228
    def test_nested_merge(self):
228
229
        tree = self.make_branch_and_tree('tree',
229
 
            format='dirstate-with-subtree')
 
230
            format='development-subtree')
230
231
        sub_tree = self.make_branch_and_tree('tree/sub-tree',
231
 
            format='dirstate-with-subtree')
 
232
            format='development-subtree')
232
233
        sub_tree.set_root_id('sub-tree-root')
233
234
        self.build_tree_contents([('tree/sub-tree/file', 'text1')])
234
235
        sub_tree.add('file')
420
421
        self.addCleanup(tree.unlock)
421
422
        self.build_tree(['a'])
422
423
        tree.add('a')
423
 
        tree.commit("added a")
424
 
        first_rev = tree.branch.revision_history()[0]
 
424
        first_rev = tree.commit("added a")
425
425
        merger = _mod_merge.Merger.from_revision_ids(None, tree,
426
426
                                          _mod_revision.NULL_REVISION,
427
427
                                          first_rev)
447
447
        merger.merge_type = _mod_merge.Merge3Merger
448
448
        tree_merger = merger.make_merger()
449
449
        self.assertIs(_mod_merge.Merge3Merger, tree_merger.__class__)
450
 
        self.assertEqual('rev2b', tree_merger.other_tree.get_revision_id())
451
 
        self.assertEqual('rev1', tree_merger.base_tree.get_revision_id())
 
450
        self.assertEqual('rev2b',
 
451
            tree_merger.other_tree.get_revision_id())
 
452
        self.assertEqual('rev1',
 
453
            tree_merger.base_tree.get_revision_id())
 
454
        self.assertEqual(other_tree.branch, tree_merger.other_branch)
452
455
 
453
456
    def test_make_preview_transform(self):
454
457
        this_tree = self.make_branch_and_tree('this')
509
512
        self.addCleanup(tree.unlock)
510
513
        self.build_tree(['a'])
511
514
        tree.add('a')
512
 
        tree.commit("added a")
 
515
        first_rev = tree.commit("added a")
513
516
        old_root_id = tree.get_root_id()
514
 
        first_rev = tree.branch.revision_history()[0]
515
517
        merger = _mod_merge.Merger.from_revision_ids(None, tree,
516
518
                                          _mod_revision.NULL_REVISION,
517
519
                                          first_rev)
557
559
class TestPlanMerge(TestCaseWithMemoryTransport):
558
560
 
559
561
    def setUp(self):
560
 
        TestCaseWithMemoryTransport.setUp(self)
 
562
        super(TestPlanMerge, self).setUp()
561
563
        mapper = versionedfile.PrefixMapper()
562
564
        factory = knit.make_file_factory(True, mapper)
563
565
        self.vf = factory(self.get_transport())
2632
2634
        # Tested with a real WT, because BranchBuilder/MemoryTree don't handle
2633
2635
        # 'tree-reference'
2634
2636
        wt = self.make_branch_and_tree('tree',
2635
 
            format='dirstate-with-subtree')
 
2637
            format='development-subtree')
2636
2638
        wt.lock_write()
2637
2639
        self.addCleanup(wt.unlock)
2638
2640
        sub_tree = self.make_branch_and_tree('tree/sub-tree',
2639
 
            format='dirstate-with-subtree')
 
2641
            format='development-subtree')
2640
2642
        wt.set_root_id('a-root-id')
2641
2643
        sub_tree.set_root_id('sub-tree-root')
2642
2644
        self.build_tree_contents([('tree/sub-tree/file', 'text1')])
2667
2669
        # Tested with a real WT, because BranchBuilder/MemoryTree don't handle
2668
2670
        # 'tree-reference'
2669
2671
        wt = self.make_branch_and_tree('tree',
2670
 
            format='dirstate-with-subtree')
 
2672
            format='development-subtree')
2671
2673
        wt.lock_write()
2672
2674
        self.addCleanup(wt.unlock)
2673
2675
        sub_tree = self.make_branch_and_tree('tree/sub',
2674
 
            format='dirstate-with-subtree')
 
2676
            format='development-subtree')
2675
2677
        wt.set_root_id('a-root-id')
2676
2678
        sub_tree.set_root_id('sub-tree-root')
2677
2679
        self.build_tree_contents([('tree/sub/file', 'text1')])
2706
2708
        # Tested with a real WT, because BranchBuilder/MemoryTree don't handle
2707
2709
        # 'tree-reference'
2708
2710
        wt = self.make_branch_and_tree('tree',
2709
 
            format='dirstate-with-subtree')
 
2711
            format='development-subtree')
2710
2712
        wt.lock_write()
2711
2713
        self.addCleanup(wt.unlock)
2712
2714
        sub_tree = self.make_branch_and_tree('tree/sub',
2713
 
            format='dirstate-with-subtree')
 
2715
            format='development-subtree')
2714
2716
        wt.set_root_id('a-root-id')
2715
2717
        sub_tree.set_root_id('sub-tree-root')
2716
2718
        self.build_tree_contents([('tree/sub/file', 'text1')])
2749
2751
        # Tested with a real WT, because BranchBuilder/MemoryTree don't handle
2750
2752
        # 'tree-reference'
2751
2753
        wt = self.make_branch_and_tree('tree',
2752
 
            format='dirstate-with-subtree')
 
2754
            format='development-subtree')
2753
2755
        wt.lock_write()
2754
2756
        self.addCleanup(wt.unlock)
2755
2757
        sub_tree = self.make_branch_and_tree('tree/sub',
2756
 
            format='dirstate-with-subtree')
 
2758
            format='development-subtree')
2757
2759
        wt.set_root_id('a-root-id')
2758
2760
        sub_tree.set_root_id('sub-tree-root')
2759
2761
        self.build_tree_contents([('tree/sub/file', 'text1')])
3244
3246
        # The dest tree is unmodified.
3245
3247
        self.assertEqual(['r1-dest'], dest_wt.get_parent_ids())
3246
3248
        self.assertTreeEntriesEqual([('', 'dest-root-id')], dest_wt)
 
3249
 
 
3250
 
 
3251
class TestMergeHooks(TestCaseWithTransport):
 
3252
 
 
3253
    def setUp(self):
 
3254
        super(TestMergeHooks, self).setUp()
 
3255
        self.tree_a = self.make_branch_and_tree('tree_a')
 
3256
        self.build_tree_contents([('tree_a/file', 'content_1')])
 
3257
        self.tree_a.add('file', 'file-id')
 
3258
        self.tree_a.commit('added file')
 
3259
 
 
3260
        self.tree_b = self.tree_a.bzrdir.sprout('tree_b').open_workingtree()
 
3261
        self.build_tree_contents([('tree_b/file', 'content_2')])
 
3262
        self.tree_b.commit('modify file')
 
3263
 
 
3264
    def test_pre_merge_hook_inject_different_tree(self):
 
3265
        tree_c = self.tree_b.bzrdir.sprout('tree_c').open_workingtree()
 
3266
        self.build_tree_contents([('tree_c/file', 'content_3')])
 
3267
        tree_c.commit("more content")
 
3268
        calls = []
 
3269
        def factory(merger):
 
3270
            self.assertIsInstance(merger, _mod_merge.Merge3Merger)
 
3271
            merger.other_tree = tree_c
 
3272
            calls.append(merger)
 
3273
        _mod_merge.Merger.hooks.install_named_hook('pre_merge',
 
3274
                                                   factory, 'test factory')
 
3275
        self.tree_a.merge_from_branch(self.tree_b.branch)
 
3276
 
 
3277
        self.assertFileEqual("content_3", 'tree_a/file')
 
3278
        self.assertLength(1, calls)
 
3279
 
 
3280
    def test_post_merge_hook_called(self):
 
3281
        calls = []
 
3282
        def factory(merger):
 
3283
            self.assertIsInstance(merger, _mod_merge.Merge3Merger)
 
3284
            calls.append(merger)
 
3285
        _mod_merge.Merger.hooks.install_named_hook('post_merge',
 
3286
                                                   factory, 'test factory')
 
3287
 
 
3288
        self.tree_a.merge_from_branch(self.tree_b.branch)
 
3289
 
 
3290
        self.assertFileEqual("content_2", 'tree_a/file')
 
3291
        self.assertLength(1, calls)