65
65
builder = self.make_branch_builder('branch')
66
66
builder.build_snapshot(None,
67
[('add', ('', b'root-id', 'directory', None)),
68
('add', ('fname', b'f-id', 'file', b'a\nb\nc\n'))],
67
[('add', ('', b'root-id', 'directory', None)),
68
('add', ('fname', b'f-id', 'file', b'a\nb\nc\n'))],
70
70
builder.build_snapshot([b'rev1'],
71
[('modify', ('fname', b'a\nB\nD\n'))],
72
revision_id=b'rev2other')
71
[('modify', ('fname', b'a\nB\nD\n'))],
72
revision_id=b'rev2other')
73
73
other = builder.get_branch().controldir.sprout('other').open_branch()
74
74
builder.build_snapshot([b'rev1'],
75
[('modify', ('fname', b'a\nB\nC\n'))], revision_id=b'rev2this')
75
[('modify', ('fname', b'a\nB\nC\n'))], revision_id=b'rev2this')
76
76
tree = builder.get_branch().create_checkout('tree', lightweight=True)
124
124
self.assertTrue("Not a branch" in err)
125
125
self.run_bzr('merge -r revno:%d:./..revno:%d:../b'
126
%(ancestor, b.revno()), working_dir='a')
126
% (ancestor, b.revno()), working_dir='a')
127
127
self.assertEqual(a.get_parent_ids(),
128
[a.branch.last_revision(), b.last_revision()])
128
[a.branch.last_revision(), b.last_revision()])
129
129
self.check_file_contents('a/goodbye', b'quux')
130
130
a_tree.revert(backups=False)
131
self.run_bzr('merge -r revno:%d:../b'%b.revno(), working_dir='a')
131
self.run_bzr('merge -r revno:%d:../b' % b.revno(), working_dir='a')
132
132
self.assertEqual(a.get_parent_ids(),
133
[a.branch.last_revision(), b.last_revision()])
133
[a.branch.last_revision(), b.last_revision()])
134
134
a_tip = a.commit('merged')
135
135
self.run_bzr('merge ../b -r last:1', working_dir='a')
136
136
self.assertEqual([a_tip], a.get_parent_ids())
266
266
# test merge for failure without parent set
267
267
out = self.run_bzr('merge', retcode=3, working_dir='branch_b')
268
268
self.assertEqual(out,
269
('', 'brz: ERROR: No location specified or remembered\n'))
269
('', 'brz: ERROR: No location specified or remembered\n'))
271
271
# test uncommitted changes
272
272
self.build_tree(['branch_b/d'])
283
283
# re-open branch as external run_brz modified it
284
284
branch_b = branch_b.controldir.open_branch()
285
285
self.assertEqual(osutils.abspath(branch_b.get_submit_branch()),
286
osutils.abspath(parent))
286
osutils.abspath(parent))
287
287
# test implicit --remember when committing new file
288
288
self.build_tree(['branch_b/e'])
302
302
# re-open branch as external run_brz modified it
303
303
branch_b = branch_b.controldir.open_branch()
304
304
self.assertEqual(osutils.abspath(branch_b.get_submit_branch()),
305
osutils.abspath(branch_c.controldir.root_transport.base))
305
osutils.abspath(branch_c.controldir.root_transport.base))
306
306
# re-open tree as external run_brz modified it
307
307
tree_b = branch_b.controldir.open_workingtree()
308
308
tree_b.commit('merge branch_c')
327
327
testament_b = Testament.from_revision(tree_b.branch.repository,
328
328
tree_b.get_parent_ids()[0])
329
329
self.assertEqualDiff(testament_a.as_text(),
330
testament_b.as_text())
330
testament_b.as_text())
331
331
tree_a.set_conflicts(conflicts.ConflictList())
332
332
tree_a.commit('message')
333
333
# it is legal to attempt to merge an already-merged bundle
334
334
err = self.run_bzr('merge ../bundle', working_dir='branch_a')[1]
335
335
# but it does nothing
336
self.assertFalse(tree_a.changes_from(tree_a.basis_tree()).has_changed())
336
self.assertFalse(tree_a.changes_from(
337
tree_a.basis_tree()).has_changed())
337
338
self.assertEqual('Nothing to do.\n', err)
339
340
def test_merge_uncommitted(self):
398
399
self.pullable_branch()
399
400
(out, err) = self.run_bzr('merge --pull --preview -d a b')
400
401
self.assertThat(out, matchers.DocTestMatches(
401
"""=== modified file 'file'
402
"""=== modified file 'file'
521
522
# make source branch
522
523
source = self.make_branch_and_tree('source')
523
524
for f in ('a', 'b', 'c', 'd'):
524
self.build_tree(['source/'+f])
525
self.build_tree(['source/' + f])
526
source.commit('added '+f, rev_id=b'rev_'+f.encode('ascii'))
527
source.commit('added ' + f, rev_id=b'rev_' + f.encode('ascii'))
528
target = source.controldir.sprout('target', b'rev_a').open_workingtree()
529
target = source.controldir.sprout(
530
'target', b'rev_a').open_workingtree()
529
531
self.assertDirectoryContent('target', ['.bzr', 'a'])
530
532
# pick 1 revision
531
533
self.run_bzr('merge -d target -r revid:rev_b..revid:rev_c source')
562
564
self.assertContainsRe(err,
563
565
'Merging from remembered parent location .*a\\/')
564
566
with tree_c.branch.lock_write():
565
tree_c.branch.set_submit_branch(tree_b.controldir.root_transport.base)
567
tree_c.branch.set_submit_branch(
568
tree_b.controldir.root_transport.base)
566
569
out, err = self.run_bzr(['merge', '-d', 'c'])
567
570
self.assertContainsRe(err,
568
571
'Merging from remembered submit location .*b\\/')
750
754
# Second merge on top of the uncommitted one
751
755
self.run_bzr(['merge', '../a', '--force'], working_dir='b')
754
757
def test_merge_with_uncommitted_changes(self):
755
758
self.run_bzr_error(['Working tree .* has uncommitted changes'],
756
759
['merge', '../a'], working_dir='b')