~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge.py

  • Committer: Andrew Bennetts
  • Date: 2010-09-17 04:32:50 UTC
  • mto: This revision was merged to the branch mainline in revision 5433.
  • Revision ID: andrew.bennetts@canonical.com-20100917043250-4f57ifkg0yu321t7
Reuse self._log_file rather than make new StringIO, and wrap pre-existing long line.

Show diffs side-by-side

added added

removed removed

Lines of Context:
90
90
        os.chdir('branch2')
91
91
        self.run_bzr('merge ../branch1/baz', retcode=3)
92
92
        self.run_bzr('merge ../branch1/foo')
93
 
        self.assertPathExists('foo')
94
 
        self.assertPathDoesNotExist('bar')
 
93
        self.failUnlessExists('foo')
 
94
        self.failIfExists('bar')
95
95
        wt2 = WorkingTree.open('.') # opens branch2
96
96
        self.assertEqual([tip], wt2.get_parent_ids())
97
97
 
121
121
        finally:
122
122
            wt1.unlock()
123
123
 
124
 
    def test_merge_into_null_tree(self):
125
 
        wt = self.make_branch_and_tree('tree')
126
 
        null_tree = wt.basis_tree()
127
 
        self.build_tree(['tree/file'])
128
 
        wt.add('file')
129
 
        wt.commit('tree with root')
130
 
        merger = _mod_merge.Merge3Merger(null_tree, null_tree, null_tree, wt,
131
 
                                         this_branch=wt.branch,
132
 
                                         do_merge=False)
133
 
        with merger.make_preview_transform() as tt:
134
 
            self.assertEqual([], tt.find_conflicts())
135
 
            preview = tt.get_preview_tree()
136
 
            self.assertEqual(wt.get_root_id(), preview.get_root_id())
137
 
 
138
124
    def test_create_rename(self):
139
125
        """Rename an inventory entry while creating the file"""
140
126
        tree =self.make_branch_and_tree('.')
171
157
        log = StringIO()
172
158
        merge_inner(tree_b.branch, tree_a, tree_b.basis_tree(),
173
159
                    this_tree=tree_b, ignore_zero=True)
174
 
        self.assertTrue('All changes applied successfully.\n' not in
 
160
        self.failUnless('All changes applied successfully.\n' not in
175
161
            self.get_log())
176
162
        tree_b.revert()
177
163
        merge_inner(tree_b.branch, tree_a, tree_b.basis_tree(),
178
164
                    this_tree=tree_b, ignore_zero=False)
179
 
        self.assertTrue('All changes applied successfully.\n' in self.get_log())
 
165
        self.failUnless('All changes applied successfully.\n' in self.get_log())
180
166
 
181
167
    def test_merge_inner_conflicts(self):
182
168
        tree_a = self.make_branch_and_tree('a')
401
387
                             '>>>>>>> MERGE-SOURCE\n',
402
388
                             'this/file')
403
389
 
404
 
    def test_merge_reverse_revision_range(self):
405
 
        tree = self.make_branch_and_tree(".")
406
 
        tree.lock_write()
407
 
        self.addCleanup(tree.unlock)
408
 
        self.build_tree(['a'])
409
 
        tree.add('a')
410
 
        tree.commit("added a")
411
 
        first_rev = tree.branch.revision_history()[0]
412
 
        merger = _mod_merge.Merger.from_revision_ids(None, tree,
413
 
                                          _mod_revision.NULL_REVISION,
414
 
                                          first_rev)
415
 
        merger.merge_type = _mod_merge.Merge3Merger
416
 
        merger.interesting_files = 'a'
417
 
        conflict_count = merger.do_merge()
418
 
        self.assertEqual(0, conflict_count)
419
 
 
420
 
        self.assertPathDoesNotExist("a")
421
 
        tree.revert()
422
 
        self.assertPathExists("a")
423
 
 
424
390
    def test_make_merger(self):
425
391
        this_tree = self.make_branch_and_tree('this')
426
392
        this_tree.commit('rev1', rev_id='rev1')
490
456
        finally:
491
457
            tree_file.close()
492
458
 
493
 
    def test_merge_require_tree_root(self):
494
 
        tree = self.make_branch_and_tree(".")
495
 
        tree.lock_write()
496
 
        self.addCleanup(tree.unlock)
497
 
        self.build_tree(['a'])
498
 
        tree.add('a')
499
 
        tree.commit("added a")
500
 
        old_root_id = tree.get_root_id()
501
 
        first_rev = tree.branch.revision_history()[0]
502
 
        merger = _mod_merge.Merger.from_revision_ids(None, tree,
503
 
                                          _mod_revision.NULL_REVISION,
504
 
                                          first_rev)
505
 
        merger.merge_type = _mod_merge.Merge3Merger
506
 
        conflict_count = merger.do_merge()
507
 
        self.assertEqual(0, conflict_count)
508
 
        self.assertEquals(set([old_root_id]), tree.all_file_ids())
509
 
        tree.set_parent_ids([])
510
 
 
511
459
    def test_merge_add_into_deleted_root(self):
512
460
        # Yes, people actually do this.  And report bugs if it breaks.
513
461
        source = self.make_branch_and_tree('source', format='rich-root-pack')
1322
1270
        self.assertEqual(['B-id', 'C-id', 'F-id'],
1323
1271
                         [t.get_revision_id() for t in merger._lca_trees])
1324
1272
 
1325
 
    def test_find_base_new_root_criss_cross(self):
1326
 
        # A   B
1327
 
        # |\ /|
1328
 
        # | X |
1329
 
        # |/ \|
1330
 
        # C   D
1331
 
        
1332
 
        builder = self.get_builder()
1333
 
        builder.build_snapshot('A-id', None,
1334
 
            [('add', ('', None, 'directory', None))])
1335
 
        builder.build_snapshot('B-id', [],
1336
 
            [('add', ('', None, 'directory', None))])
1337
 
        builder.build_snapshot('D-id', ['A-id', 'B-id'], [])
1338
 
        builder.build_snapshot('C-id', ['A-id', 'B-id'], [])
1339
 
        merger = self.make_Merger(builder, 'D-id')
1340
 
        self.assertEqual('A-id', merger.base_rev_id)
1341
 
        self.assertTrue(merger._is_criss_cross)
1342
 
        self.assertEqual(['A-id', 'B-id'], [t.get_revision_id()
1343
 
                                            for t in merger._lca_trees])
1344
 
 
1345
1273
    def test_no_criss_cross_passed_to_merge_type(self):
1346
1274
        class LCATreesMerger(LoggingMerger):
1347
1275
            supports_lca_trees = True
2915
2843
 
2916
2844
    def get_merger_factory(self):
2917
2845
        # Allows  the inner methods to access the test attributes
2918
 
        calls = self.calls
 
2846
        test = self
2919
2847
 
2920
2848
        class FooMerger(_mod_merge.ConfigurableFileMerger):
2921
2849
            name_prefix = "foo"
2922
2850
            default_files = ['bar']
2923
2851
 
2924
2852
            def merge_text(self, params):
2925
 
                calls.append('merge_text')
 
2853
                test.calls.append('merge_text')
2926
2854
                return ('not_applicable', None)
2927
2855
 
2928
2856
        def factory(merger):