84
84
"""Created a standalone tree (format: development-colo)\n""",
86
self.assertEqual(b'', err)
86
self.assertEqual('', err)
87
87
out, err = self.run_bzr(
88
88
'branch a file:b,branch=thiswasa')
89
self.assertEqual(b'', out)
90
self.assertEqual(b'Branched 2 revisions.\n', err)
89
self.assertEqual('', out)
90
self.assertEqual('Branched 2 revisions.\n', err)
91
91
out, err = self.run_bzr('branches b')
92
self.assertEqual(b" orig\n thiswasa\n", out)
93
self.assertEqual(b'', err)
92
self.assertEqual(" orig\n thiswasa\n", out)
93
self.assertEqual('', err)
94
94
out, err = self.run_bzr('branch a file:b,branch=orig', retcode=3)
95
self.assertEqual(b'', out)
95
self.assertEqual('', out)
97
b'brz: ERROR: Already a branch: "file:b,branch=orig".\n', err)
97
'brz: ERROR: Already a branch: "file:b,branch=orig".\n', err)
99
99
def test_from_colocated(self):
100
100
"""Branch from a colocated branch into a regular branch."""
102
102
tree.controldir.create_branch(name='somecolo')
103
103
out, err = self.run_bzr('branch %s,branch=somecolo' %
104
104
local_path_to_url('a'))
105
self.assertEqual(b'', out)
106
self.assertEqual(b'Branched 0 revisions.\n', err)
105
self.assertEqual('', out)
106
self.assertEqual('Branched 0 revisions.\n', err)
107
107
self.assertPathExists("somecolo")
109
109
def test_branch_broken_pack(self):
125
125
corrupt = b'\xFF'
126
126
f.write(corrupt) # make sure we corrupt something
127
self.run_bzr_error([b'Corruption while decompressing repository file'],
127
self.run_bzr_error(['Corruption while decompressing repository file'],
128
128
'branch a b', retcode=3)
130
130
def test_branch_switch_no_branch(self):
132
132
# => new branch will be created, but switch fails
133
133
self.example_branch('a')
134
134
self.make_repository('current')
135
self.run_bzr_error([b'No WorkingTree exists for'],
135
self.run_bzr_error(['No WorkingTree exists for'],
136
136
'branch --switch ../a ../b', working_dir='current')
137
137
a = branch.Branch.open('a')
138
138
b = branch.Branch.open('b')
144
144
# branch is unmodified
145
145
self.example_branch('a')
146
146
self.make_branch('current')
147
self.run_bzr_error([b'No WorkingTree exists for'],
147
self.run_bzr_error(['No WorkingTree exists for'],
148
148
'branch --switch ../a ../b', working_dir='current')
149
149
a = branch.Branch.open('a')
150
150
b = branch.Branch.open('b')
159
159
self.example_branch('a')
160
160
tree = self.make_branch_and_tree('current')
161
161
c1 = tree.commit('some diverged change')
162
self.run_bzr_error([b'Cannot switch a branch, only a checkout'],
162
self.run_bzr_error(['Cannot switch a branch, only a checkout'],
163
163
'branch --switch ../a ../b', working_dir='current')
164
164
a = branch.Branch.open('a')
165
165
b = branch.Branch.open('b')
185
185
self.assertEqual(a.last_revision(), b.last_revision())
186
186
work = WorkingTree.open('current')
187
187
self.assertEndsWith(work.branch.get_bound_location(), '/b/')
188
self.assertContainsRe(err, b"Switched to branch: .*/b/")
188
self.assertContainsRe(err, "Switched to branch: .*/b/")
190
190
def test_branch_switch_lightweight_checkout(self):
191
191
# Lightweight checkout in the current directory:
200
200
self.assertEqual(a.last_revision(), b.last_revision())
201
201
work = WorkingTree.open('current')
202
202
self.assertEndsWith(work.branch.base, '/b/')
203
self.assertContainsRe(err, b"Switched to branch: .*/b/")
203
self.assertContainsRe(err, "Switched to branch: .*/b/")
205
205
def test_branch_only_copies_history(self):
206
206
# Knit branches should only push the history for the current revision.
296
296
self.build_tree_contents([('b/goodbye', b'baz')])# same content
297
297
# fails without --use-existing-dir
298
298
out, err = self.run_bzr('branch a b', retcode=3)
299
self.assertEqual(b'', out)
300
self.assertEqual(b'brz: ERROR: Target directory "b" already exists.\n',
299
self.assertEqual('', out)
300
self.assertEqual('brz: ERROR: Target directory "b" already exists.\n',
302
302
# force operation
303
303
self.run_bzr('branch a b --use-existing-dir')
306
306
self.assertPathDoesNotExist('b/godbye.moved')
307
307
# we can't branch into branch
308
308
out, err = self.run_bzr('branch a b --use-existing-dir', retcode=3)
309
self.assertEqual(b'', out)
310
self.assertEqual(b'brz: ERROR: Already a branch: "b".\n', err)
309
self.assertEqual('', out)
310
self.assertEqual('brz: ERROR: Already a branch: "b".\n', err)
312
312
def test_branch_bind(self):
313
313
self.example_branch('a')
314
314
out, err = self.run_bzr('branch a b --bind')
315
self.assertEndsWith(err, b"New branch bound to a\n")
315
self.assertEndsWith(err, "New branch bound to a\n")
316
316
b = branch.Branch.open('b')
317
317
self.assertEndsWith(b.get_bound_location(), '/a/')
394
394
# branching our local branch gives us a new stacked branch pointing at
396
396
out, err = self.run_bzr(['branch', 'branch', 'newbranch'])
397
self.assertEqual(b'', out)
398
self.assertEqual(b'Branched 2 revisions.\n',
397
self.assertEqual('', out)
398
self.assertEqual('Branched 2 revisions.\n',
400
400
# it should have preserved the branch format, and so it should be
401
401
# capable of supporting stacking, but not actually have a stacked_on
419
419
work_tree.branch.push(branch_tree.branch)
420
420
# you can chain branches on from there
421
421
out, err = self.run_bzr(['branch', 'branch', '--stacked', 'branch2'])
422
self.assertEqual(b'', out)
423
self.assertEqual(b'Created new stacked branch referring to %s.\n' %
424
branch_tree.branch.base.encode('utf-8'), err)
422
self.assertEqual('', out)
423
self.assertEqual('Created new stacked branch referring to %s.\n' %
424
branch_tree.branch.base, err)
425
425
self.assertEqual(branch_tree.branch.base,
426
426
branch.Branch.open('branch2').get_stacked_on_url())
427
427
branch2_tree = WorkingTree.open('branch2')
441
441
# and a branch from it which is stacked
442
442
out, err = self.run_bzr(['branch', '--stacked', 'mainline',
444
self.assertEqual(b'', out)
445
self.assertEqual(b'Created new stacked branch referring to %s.\n' %
446
trunk_tree.branch.base.encode('utf-8'), err)
444
self.assertEqual('', out)
445
self.assertEqual('Created new stacked branch referring to %s.\n' %
446
trunk_tree.branch.base, err)
447
447
self.assertRevisionNotInRepository('newbranch', original_revid)
448
448
new_branch = branch.Branch.open('newbranch')
449
449
self.assertEqual(trunk_tree.branch.base,
463
463
['branch', '--stacked', 'trunk', 'shallow'])
464
464
# We should notify the user that we upgraded their format
465
465
self.assertEqualDiff(
466
b'Source repository format does not support stacking, using format:\n'
467
b' Packs 5 (adds stacking support, requires bzr 1.6)\n'
468
b'Source branch format does not support stacking, using format:\n'
469
b' Branch format 7\n'
470
b'Doing on-the-fly conversion from RepositoryFormatKnitPack1() to RepositoryFormatKnitPack5().\n'
471
b'This may take some time. Upgrade the repositories to the same format for better performance.\n'
472
b'Created new stacked branch referring to %s.\n' %
473
(trunk.base.encode('utf-8'),),
466
'Source repository format does not support stacking, using format:\n'
467
' Packs 5 (adds stacking support, requires bzr 1.6)\n'
468
'Source branch format does not support stacking, using format:\n'
470
'Doing on-the-fly conversion from RepositoryFormatKnitPack1() to RepositoryFormatKnitPack5().\n'
471
'This may take some time. Upgrade the repositories to the same format for better performance.\n'
472
'Created new stacked branch referring to %s.\n' %
476
476
def test_branch_stacked_from_rich_root_non_stackable(self):
479
479
['branch', '--stacked', 'trunk', 'shallow'])
480
480
# We should notify the user that we upgraded their format
481
481
self.assertEqualDiff(
482
b'Source repository format does not support stacking, using format:\n'
483
b' Packs 5 rich-root (adds stacking support, requires bzr 1.6.1)\n'
484
b'Source branch format does not support stacking, using format:\n'
485
b' Branch format 7\n'
486
b'Doing on-the-fly conversion from RepositoryFormatKnitPack4() to RepositoryFormatKnitPack5RichRoot().\n'
487
b'This may take some time. Upgrade the repositories to the same format for better performance.\n'
488
b'Created new stacked branch referring to %s.\n' % (trunk.base.encode('utf-8'),),
482
'Source repository format does not support stacking, using format:\n'
483
' Packs 5 rich-root (adds stacking support, requires bzr 1.6.1)\n'
484
'Source branch format does not support stacking, using format:\n'
486
'Doing on-the-fly conversion from RepositoryFormatKnitPack4() to RepositoryFormatKnitPack5RichRoot().\n'
487
'This may take some time. Upgrade the repositories to the same format for better performance.\n'
488
'Created new stacked branch referring to %s.\n' % (trunk.base,),