151
133
self.run_bzr(['switch', 'branchb'], working_dir='heavyco/a')
152
134
self.assertEqual(branchb_id, checkout.last_revision())
153
135
self.assertEqual(tree2.branch.base, checkout.branch.get_bound_location())
155
def test_switch_revision(self):
156
tree = self._create_sample_tree()
157
checkout = tree.branch.create_checkout('checkout', lightweight=True)
158
self.run_bzr(['switch', 'branch-1', '-r1'], working_dir='checkout')
159
self.assertPathExists('checkout/file-1')
160
self.assertPathDoesNotExist('checkout/file-2')
162
def test_switch_only_revision(self):
163
tree = self._create_sample_tree()
164
checkout = tree.branch.create_checkout('checkout', lightweight=True)
165
self.assertPathExists('checkout/file-1')
166
self.assertPathExists('checkout/file-2')
167
self.run_bzr(['switch', '-r1'], working_dir='checkout')
168
self.assertPathExists('checkout/file-1')
169
self.assertPathDoesNotExist('checkout/file-2')
170
# Check that we don't accept a range
172
['bzr switch --revision takes exactly one revision identifier'],
173
['switch', '-r0..2'], working_dir='checkout')
175
def prepare_lightweight_switch(self):
176
branch = self.make_branch('branch')
177
branch.create_checkout('tree', lightweight=True)
178
osutils.rename('branch', 'branch1')
180
def test_switch_lightweight_after_branch_moved(self):
181
self.prepare_lightweight_switch()
182
self.run_bzr('switch --force ../branch1', working_dir='tree')
183
branch_location = WorkingTree.open('tree').branch.base
184
self.assertEndsWith(branch_location, 'branch1/')
186
def test_switch_lightweight_after_branch_moved_relative(self):
187
self.prepare_lightweight_switch()
188
self.run_bzr('switch --force branch1', working_dir='tree')
189
branch_location = WorkingTree.open('tree').branch.base
190
self.assertEndsWith(branch_location, 'branch1/')
192
def test_create_branch_no_branch(self):
193
self.prepare_lightweight_switch()
194
self.run_bzr_error(['cannot create branch without source branch'],
195
'switch --create-branch ../branch2', working_dir='tree')
197
def test_create_branch(self):
198
branch = self.make_branch('branch')
199
tree = branch.create_checkout('tree', lightweight=True)
200
tree.commit('one', rev_id='rev-1')
201
self.run_bzr('switch --create-branch ../branch2', working_dir='tree')
202
tree = WorkingTree.open('tree')
203
self.assertEndsWith(tree.branch.base, '/branch2/')
205
def test_create_branch_local(self):
206
branch = self.make_branch('branch')
207
tree = branch.create_checkout('tree', lightweight=True)
208
tree.commit('one', rev_id='rev-1')
209
self.run_bzr('switch --create-branch branch2', working_dir='tree')
210
tree = WorkingTree.open('tree')
211
# The new branch should have been created at the same level as
212
# 'branch', because we did not have a '/' segment
213
self.assertEqual(branch.base[:-1] + '2/', tree.branch.base)
215
def test_create_branch_short_name(self):
216
branch = self.make_branch('branch')
217
tree = branch.create_checkout('tree', lightweight=True)
218
tree.commit('one', rev_id='rev-1')
219
self.run_bzr('switch -b branch2', working_dir='tree')
220
tree = WorkingTree.open('tree')
221
# The new branch should have been created at the same level as
222
# 'branch', because we did not have a '/' segment
223
self.assertEqual(branch.base[:-1] + '2/', tree.branch.base)
225
def test_create_branch_directory_services(self):
226
branch = self.make_branch('branch')
227
tree = branch.create_checkout('tree', lightweight=True)
228
class FooLookup(object):
229
def look_up(self, name, url):
231
directories.register('foo:', FooLookup, 'Create branches named foo-')
232
self.addCleanup(directories.remove, 'foo:')
233
self.run_bzr('switch -b foo:branch2', working_dir='tree')
234
tree = WorkingTree.open('tree')
235
self.assertEndsWith(tree.branch.base, 'foo-branch2/')
237
def test_switch_with_post_switch_hook(self):
238
from bzrlib import branch as _mod_branch
240
_mod_branch.Branch.hooks.install_named_hook('post_switch',
242
self.make_branch_and_tree('branch')
243
self.run_bzr('branch branch branch2')
244
self.run_bzr('checkout branch checkout')
246
self.assertLength(0, calls)
247
out, err = self.run_bzr('switch ../branch2')
248
self.assertLength(1, calls)
250
def test_switch_lightweight_co_with_post_switch_hook(self):
251
from bzrlib import branch as _mod_branch
253
_mod_branch.Branch.hooks.install_named_hook('post_switch',
255
self.make_branch_and_tree('branch')
256
self.run_bzr('branch branch branch2')
257
self.run_bzr('checkout --lightweight branch checkout')
259
self.assertLength(0, calls)
260
out, err = self.run_bzr('switch ../branch2')
261
self.assertLength(1, calls)
263
def test_switch_lightweight_directory(self):
264
"""Test --directory option"""
266
# create a source branch
267
a_tree = self.make_branch_and_tree('a')
268
self.build_tree_contents([('a/a', 'initial\n')])
270
a_tree.commit(message='initial')
272
# clone and add a differing revision
273
b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
274
self.build_tree_contents([('b/a', 'initial\nmore\n')])
275
b_tree.commit(message='more')
277
self.run_bzr('checkout --lightweight a checkout')
278
self.run_bzr('switch --directory checkout b')
279
self.assertFileEqual('initial\nmore\n', 'checkout/a')
281
class TestSwitchParentLocationBase(TestCaseWithTransport):
284
"""Set up a repository and branch ready for testing."""
285
super(TestSwitchParentLocationBase, self).setUp()
286
self.script_runner = script.ScriptRunner()
287
self.script_runner.run_script(self, '''
288
$ bzr init-repo --no-trees repo
291
shared repository: repo
292
$ bzr init repo/trunk
293
Created a repository branch...
294
Using shared repository: ...
297
def assertParent(self, expected_parent, branch):
298
"""Verify that the parent is not None and is set correctly."""
299
actual_parent = branch.get_parent()
300
self.assertIsSameRealPath(urlutils.local_path_to_url(expected_parent),
304
class TestSwitchParentLocation(TestSwitchParentLocationBase):
306
def _checkout_and_switch(self, option=''):
307
self.script_runner.run_script(self, '''
308
$ bzr checkout %(option)s repo/trunk checkout
310
$ bzr switch --create-branch switched
311
2>Tree is up to date at revision 0.
312
2>Switched to branch:...switched...
315
bound_branch = branch.Branch.open_containing('checkout')[0]
316
master_branch = branch.Branch.open_containing('repo/switched')[0]
317
return (bound_branch, master_branch)
319
def test_switch_parent_lightweight(self):
320
"""Lightweight checkout using bzr switch."""
321
bb, mb = self._checkout_and_switch(option='--lightweight')
322
self.assertParent('repo/trunk', bb)
323
self.assertParent('repo/trunk', mb)
325
def test_switch_parent_heavyweight(self):
326
"""Heavyweight checkout using bzr switch."""
327
bb, mb = self._checkout_and_switch()
328
self.assertParent('repo/trunk', bb)
329
self.assertParent('repo/trunk', mb)