/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_merge.py

  • Committer: Robert Collins
  • Date: 2008-04-04 00:43:07 UTC
  • mfrom: (3331 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3333.
  • Revision ID: robertc@robertcollins.net-20080404004307-0whomfhm3yal2rvw
Resolve conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
32
32
from bzrlib.errors import UnrelatedBranches, NoCommits, BzrCommandError
33
33
from bzrlib.merge import transform_tree, merge_inner, _PlanMerge
34
34
from bzrlib.osutils import pathjoin, file_kind
35
 
from bzrlib.revision import common_ancestor
36
35
from bzrlib.tests import TestCaseWithTransport, TestCaseWithMemoryTransport
37
36
from bzrlib.trace import (enable_test_log, disable_test_log)
38
37
from bzrlib.workingtree import WorkingTree
106
105
        """Merge base is sane when two unrelated branches are merged"""
107
106
        wt1, br2 = self.test_pending_with_null()
108
107
        wt1.commit("blah")
109
 
        last = wt1.branch.last_revision()
110
 
        self.assertEqual(common_ancestor(last, last, wt1.branch.repository), last)
 
108
        wt1.lock_read()
 
109
        try:
 
110
            last = wt1.branch.last_revision()
 
111
            last2 = br2.last_revision()
 
112
            graph = wt1.branch.repository.get_graph()
 
113
            self.assertEqual(last2, graph.find_unique_lca(last, last2))
 
114
        finally:
 
115
            wt1.unlock()
111
116
 
112
117
    def test_create_rename(self):
113
118
        """Rename an inventory entry while creating the file"""
352
357
        merger.merge_type = _mod_merge.Merge3Merger
353
358
        merger.do_merge()
354
359
 
 
360
    def test_merge3_will_detect_cherrypick(self):
 
361
        this_tree = self.make_branch_and_tree('this')
 
362
        self.build_tree_contents([('this/file', "a\n")])
 
363
        this_tree.add('file')
 
364
        this_tree.commit('rev1')
 
365
        other_tree = this_tree.bzrdir.sprout('other').open_workingtree()
 
366
        self.build_tree_contents([('other/file', "a\nb\n")])
 
367
        other_tree.commit('rev2b', rev_id='rev2b')
 
368
        self.build_tree_contents([('other/file', "a\nb\nc\n")])
 
369
        other_tree.commit('rev3b', rev_id='rev3b')
 
370
        this_tree.lock_write()
 
371
        self.addCleanup(this_tree.unlock)
 
372
 
 
373
        merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(),
 
374
            this_tree, 'rev3b', 'rev2b', other_tree.branch)
 
375
        merger.merge_type = _mod_merge.Merge3Merger
 
376
        merger.do_merge()
 
377
        self.assertFileEqual('a\n'
 
378
                             '<<<<<<< TREE\n'
 
379
                             '=======\n'
 
380
                             'c\n'
 
381
                             '>>>>>>> MERGE-SOURCE\n',
 
382
                             'this/file')
 
383
 
355
384
    def test_make_merger(self):
356
385
        this_tree = self.make_branch_and_tree('this')
357
386
        this_tree.commit('rev1', rev_id='rev1')
591
620
        self.add_version('REV2', ['ROOT'], 'abce')
592
621
        # both sides merge, discarding others' changes
593
622
        self.add_version('LCA1', ['REV1', 'REV2'], 'abcd')
594
 
        self.add_version('LCA2', ['REV1', 'REV2'], 'abce')
 
623
        self.add_version('LCA2', ['REV1', 'REV2'], 'fabce')
595
624
        plan = self.plan_merge_vf.plan_lca_merge('LCA1', 'LCA2')
596
 
        self.assertEqual([('unchanged', 'a\n'),
 
625
        self.assertEqual([('new-b', 'f\n'),
 
626
                          ('unchanged', 'a\n'),
597
627
                          ('unchanged', 'b\n'),
598
628
                          ('unchanged', 'c\n'),
599
629
                          ('conflicted-a', 'd\n'),
600
630
                          ('conflicted-b', 'e\n'),
601
631
                         ], list(plan))
 
632
 
 
633
 
 
634
class TestMergeImplementation(object):
 
635
 
 
636
    def do_merge(self, target_tree, source_tree, **kwargs):
 
637
        merger = _mod_merge.Merger.from_revision_ids(progress.DummyProgress(),
 
638
            target_tree, source_tree.last_revision(),
 
639
            other_branch=source_tree.branch)
 
640
        merger.merge_type=self.merge_type
 
641
        for name, value in kwargs.items():
 
642
            setattr(merger, name, value)
 
643
        merger.do_merge()
 
644
 
 
645
    def test_merge_specific_file(self):
 
646
        this_tree = self.make_branch_and_tree('this')
 
647
        this_tree.lock_write()
 
648
        self.addCleanup(this_tree.unlock)
 
649
        self.build_tree_contents([
 
650
            ('this/file1', 'a\nb\n'),
 
651
            ('this/file2', 'a\nb\n')
 
652
        ])
 
653
        this_tree.add(['file1', 'file2'])
 
654
        this_tree.commit('Added files')
 
655
        other_tree = this_tree.bzrdir.sprout('other').open_workingtree()
 
656
        self.build_tree_contents([
 
657
            ('other/file1', 'a\nb\nc\n'),
 
658
            ('other/file2', 'a\nb\nc\n')
 
659
        ])
 
660
        other_tree.commit('modified both')
 
661
        self.build_tree_contents([
 
662
            ('this/file1', 'd\na\nb\n'),
 
663
            ('this/file2', 'd\na\nb\n')
 
664
        ])
 
665
        this_tree.commit('modified both')
 
666
        self.do_merge(this_tree, other_tree, interesting_files=['file1'])
 
667
        self.assertFileEqual('d\na\nb\nc\n', 'this/file1')
 
668
        self.assertFileEqual('d\na\nb\n', 'this/file2')
 
669
 
 
670
 
 
671
class TestMerge3Merge(TestCaseWithTransport, TestMergeImplementation):
 
672
 
 
673
    merge_type = _mod_merge.Merge3Merger
 
674
 
 
675
 
 
676
class TestWeaveMerge(TestCaseWithTransport, TestMergeImplementation):
 
677
 
 
678
    merge_type = _mod_merge.WeaveMerger
 
679
 
 
680
 
 
681
class TestLCAMerge(TestCaseWithTransport, TestMergeImplementation):
 
682
 
 
683
    merge_type = _mod_merge.LCAMerger