~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_merge.py

  • Committer: John Arbash Meinel
  • Date: 2008-10-30 00:55:00 UTC
  • mto: (3815.2.5 prepare-1.9)
  • mto: This revision was merged to the branch mainline in revision 3811.
  • Revision ID: john@arbash-meinel.com-20081030005500-r5cej1cxflqhs3io
Switch so that we are using a simple timestamp as the first action.

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
        tree.commit(message='setup')
45
45
        return tree
46
46
 
 
47
    def create_conflicting_branches(self):
 
48
        """Create two branches which have overlapping modifications.
 
49
 
 
50
        :return: (tree, other_branch) Where merging other_branch causes a file
 
51
            conflict.
 
52
        """
 
53
        builder = self.make_branch_builder('branch')
 
54
        builder.build_snapshot('rev1', None,
 
55
            [('add', ('', 'root-id', 'directory', None)),
 
56
             ('add', ('fname', 'f-id', 'file', 'a\nb\nc\n'))])
 
57
        builder.build_snapshot('rev2other', ['rev1'],
 
58
            [('modify', ('f-id', 'a\nB\nD\n'))])
 
59
        other = builder.get_branch().bzrdir.sprout('other').open_branch()
 
60
        builder.build_snapshot('rev2this', ['rev1'],
 
61
            [('modify', ('f-id', 'a\nB\nC\n'))])
 
62
        tree = builder.get_branch().create_checkout('tree', lightweight=True)
 
63
        return tree, other
 
64
 
47
65
    def test_merge_reprocess(self):
48
66
        d = BzrDir.create_standalone_workingtree('.')
49
67
        d.commit('h')
101
119
        self.run_bzr('merge ../b -r last:1')
102
120
        self.assertEqual([a_tip], a.get_parent_ids())
103
121
 
 
122
    def test_merge_defaults_to_reprocess(self):
 
123
        tree, other = self.create_conflicting_branches()
 
124
        # The default merge algorithm should enable 'reprocess' because
 
125
        # 'show-base' is not set
 
126
        self.run_bzr('merge ../other', working_dir='tree',
 
127
                     retcode=1)
 
128
        self.assertEqualDiff('a\n'
 
129
                             'B\n'
 
130
                             '<<<<<<< TREE\n'
 
131
                             'C\n'
 
132
                             '=======\n'
 
133
                             'D\n'
 
134
                             '>>>>>>> MERGE-SOURCE\n',
 
135
                             tree.get_file_text('f-id'))
 
136
 
 
137
    def test_merge_explicit_reprocess_show_base(self):
 
138
        tree, other = self.create_conflicting_branches()
 
139
        # Explicitly setting --reprocess, and --show-base is an error
 
140
        self.run_bzr_error(['Cannot do conflict reduction and show base'],
 
141
                           'merge ../other --reprocess --show-base',
 
142
                           working_dir='tree')
 
143
 
 
144
    def test_merge_override_reprocess(self):
 
145
        tree, other = self.create_conflicting_branches()
 
146
        # Explicitly disable reprocess
 
147
        self.run_bzr('merge ../other --no-reprocess', working_dir='tree',
 
148
                     retcode=1)
 
149
        self.assertEqualDiff('a\n'
 
150
                             '<<<<<<< TREE\n'
 
151
                             'B\n'
 
152
                             'C\n'
 
153
                             '=======\n'
 
154
                             'B\n'
 
155
                             'D\n'
 
156
                             '>>>>>>> MERGE-SOURCE\n',
 
157
                             tree.get_file_text('f-id'))
 
158
 
 
159
    def test_merge_override_show_base(self):
 
160
        tree, other = self.create_conflicting_branches()
 
161
        # Setting '--show-base' will auto-disable '--reprocess'
 
162
        self.run_bzr('merge ../other --show-base', working_dir='tree',
 
163
                     retcode=1)
 
164
        self.assertEqualDiff('a\n'
 
165
                             '<<<<<<< TREE\n'
 
166
                             'B\n'
 
167
                             'C\n'
 
168
                             '||||||| BASE-REVISION\n'
 
169
                             'b\n'
 
170
                             'c\n'
 
171
                             '=======\n'
 
172
                             'B\n'
 
173
                             'D\n'
 
174
                             '>>>>>>> MERGE-SOURCE\n',
 
175
                             tree.get_file_text('f-id'))
 
176
 
104
177
    def test_merge_with_missing_file(self):
105
178
        """Merge handles missing file conflicts"""
106
179
        self.build_tree_contents([
176
249
        
177
250
        base = urlutils.local_path_from_url(branch_a.base)
178
251
        self.assertStartsWith(err,
179
 
                          'Merging from remembered location %s\n' % (base,))
 
252
                          'Merging from remembered submit location %s\n' % (base,))
180
253
        self.assertEndsWith(err, '+N  b\nAll changes applied successfully.\n')
181
254
        self.assertEquals(abspath(branch_b.get_submit_branch()),
182
255
                          abspath(parent))
418
491
        tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
419
492
        tree_c = tree_a.bzrdir.sprout('c').open_workingtree()
420
493
        out, err = self.run_bzr(['merge', '-d', 'c'])
421
 
        self.assertContainsRe(err, 'Merging from remembered location .*a\/')
 
494
        self.assertContainsRe(err, 'Merging from remembered parent location .*a\/')
422
495
        tree_c.branch.set_submit_branch(tree_b.bzrdir.root_transport.base)
423
496
        out, err = self.run_bzr(['merge', '-d', 'c'])
424
 
        self.assertContainsRe(err, 'Merging from remembered location .*b\/')
 
497
        self.assertContainsRe(err, 'Merging from remembered submit location .*b\/')
425
498
 
426
499
    def test_remember_sets_submit(self):
427
500
        tree_a = self.make_branch_and_tree('a')