23
from bzrlib import osutils
24
28
from bzrlib.workingtree import WorkingTree
25
from bzrlib.tests.blackbox import ExternalBase
29
from bzrlib.tests import (
30
TestCaseWithTransport,
26
33
from bzrlib.directory_service import directories
29
class TestSwitch(ExternalBase):
36
class TestSwitch(TestCaseWithTransport):
31
38
def _create_sample_tree(self):
32
39
tree = self.make_branch_and_tree('branch-1')
149
156
tree = self._create_sample_tree()
150
157
checkout = tree.branch.create_checkout('checkout', lightweight=True)
151
158
self.run_bzr(['switch', 'branch-1', '-r1'], working_dir='checkout')
152
self.failUnlessExists('checkout/file-1')
153
self.failIfExists('checkout/file-2')
159
self.assertPathExists('checkout/file-1')
160
self.assertPathDoesNotExist('checkout/file-2')
155
162
def test_switch_only_revision(self):
156
163
tree = self._create_sample_tree()
157
164
checkout = tree.branch.create_checkout('checkout', lightweight=True)
158
self.failUnlessExists('checkout/file-1')
159
self.failUnlessExists('checkout/file-2')
165
self.assertPathExists('checkout/file-1')
166
self.assertPathExists('checkout/file-2')
160
167
self.run_bzr(['switch', '-r1'], working_dir='checkout')
161
self.failUnlessExists('checkout/file-1')
162
self.failIfExists('checkout/file-2')
168
self.assertPathExists('checkout/file-1')
169
self.assertPathDoesNotExist('checkout/file-2')
163
170
# Check that we don't accept a range
164
171
self.run_bzr_error(
165
172
['bzr switch --revision takes exactly one revision identifier'],
252
259
self.assertLength(0, calls)
253
260
out, err = self.run_bzr('switch ../branch2')
254
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)