44
44
tree.commit(message='setup')
47
def create_conflicting_branches(self):
48
"""Create two branches which have overlapping modifications.
50
:return: (tree, other_branch) Where merging other_branch causes a file
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)
65
47
def test_merge_reprocess(self):
66
48
d = BzrDir.create_standalone_workingtree('.')
119
101
self.run_bzr('merge ../b -r last:1')
120
102
self.assertEqual([a_tip], a.get_parent_ids())
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',
128
self.assertEqualDiff('a\n'
134
'>>>>>>> MERGE-SOURCE\n',
135
tree.get_file_text('f-id'))
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',
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',
149
self.assertEqualDiff('a\n'
156
'>>>>>>> MERGE-SOURCE\n',
157
tree.get_file_text('f-id'))
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',
164
self.assertEqualDiff('a\n'
168
'||||||| BASE-REVISION\n'
174
'>>>>>>> MERGE-SOURCE\n',
175
tree.get_file_text('f-id'))
177
104
def test_merge_with_missing_file(self):
178
105
"""Merge handles missing file conflicts"""
179
106
self.build_tree_contents([
250
177
base = urlutils.local_path_from_url(branch_a.base)
251
178
self.assertStartsWith(err,
252
'Merging from remembered submit location %s\n' % (base,))
179
'Merging from remembered location %s\n' % (base,))
253
180
self.assertEndsWith(err, '+N b\nAll changes applied successfully.\n')
254
181
self.assertEquals(abspath(branch_b.get_submit_branch()),
491
418
tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
492
419
tree_c = tree_a.bzrdir.sprout('c').open_workingtree()
493
420
out, err = self.run_bzr(['merge', '-d', 'c'])
494
self.assertContainsRe(err, 'Merging from remembered parent location .*a\/')
421
self.assertContainsRe(err, 'Merging from remembered location .*a\/')
495
422
tree_c.branch.set_submit_branch(tree_b.bzrdir.root_transport.base)
496
423
out, err = self.run_bzr(['merge', '-d', 'c'])
497
self.assertContainsRe(err, 'Merging from remembered submit location .*b\/')
424
self.assertContainsRe(err, 'Merging from remembered location .*b\/')
499
426
def test_remember_sets_submit(self):
500
427
tree_a = self.make_branch_and_tree('a')