14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
19
"""Tests for the switch command of bzr."""
23
from bzrlib import osutils
24
23
from bzrlib.workingtree import WorkingTree
25
24
from bzrlib.tests.blackbox import ExternalBase
26
from bzrlib.directory_service import directories
29
27
class TestSwitch(ExternalBase):
31
def _create_sample_tree(self):
32
tree = self.make_branch_and_tree('branch-1')
33
self.build_tree(['branch-1/file-1', 'branch-1/file-2'])
40
29
def test_switch_up_to_date_light_checkout(self):
41
30
self.make_branch_and_tree('branch')
42
31
self.run_bzr('branch branch branch2')
144
133
self.run_bzr(['switch', 'branchb'], working_dir='heavyco/a')
145
134
self.assertEqual(branchb_id, checkout.last_revision())
146
135
self.assertEqual(tree2.branch.base, checkout.branch.get_bound_location())
148
def test_switch_revision(self):
149
tree = self._create_sample_tree()
150
checkout = tree.branch.create_checkout('checkout', lightweight=True)
151
self.run_bzr(['switch', 'branch-1', '-r1'], working_dir='checkout')
152
self.failUnlessExists('checkout/file-1')
153
self.failIfExists('checkout/file-2')
155
def test_switch_only_revision(self):
156
tree = self._create_sample_tree()
157
checkout = tree.branch.create_checkout('checkout', lightweight=True)
158
self.failUnlessExists('checkout/file-1')
159
self.failUnlessExists('checkout/file-2')
160
self.run_bzr(['switch', '-r1'], working_dir='checkout')
161
self.failUnlessExists('checkout/file-1')
162
self.failIfExists('checkout/file-2')
163
# Check that we don't accept a range
165
['bzr switch --revision takes exactly one revision identifier'],
166
['switch', '-r0..2'], working_dir='checkout')
168
def prepare_lightweight_switch(self):
169
branch = self.make_branch('branch')
170
branch.create_checkout('tree', lightweight=True)
171
osutils.rename('branch', 'branch1')
173
def test_switch_lightweight_after_branch_moved(self):
174
self.prepare_lightweight_switch()
175
self.run_bzr('switch --force ../branch1', working_dir='tree')
176
branch_location = WorkingTree.open('tree').branch.base
177
self.assertEndsWith(branch_location, 'branch1/')
179
def test_switch_lightweight_after_branch_moved_relative(self):
180
self.prepare_lightweight_switch()
181
self.run_bzr('switch --force branch1', working_dir='tree')
182
branch_location = WorkingTree.open('tree').branch.base
183
self.assertEndsWith(branch_location, 'branch1/')
185
def test_create_branch_no_branch(self):
186
self.prepare_lightweight_switch()
187
self.run_bzr_error(['cannot create branch without source branch'],
188
'switch --create-branch ../branch2', working_dir='tree')
190
def test_create_branch(self):
191
branch = self.make_branch('branch')
192
tree = branch.create_checkout('tree', lightweight=True)
193
tree.commit('one', rev_id='rev-1')
194
self.run_bzr('switch --create-branch ../branch2', working_dir='tree')
195
tree = WorkingTree.open('tree')
196
self.assertEndsWith(tree.branch.base, '/branch2/')
198
def test_create_branch_local(self):
199
branch = self.make_branch('branch')
200
tree = branch.create_checkout('tree', lightweight=True)
201
tree.commit('one', rev_id='rev-1')
202
self.run_bzr('switch --create-branch branch2', working_dir='tree')
203
tree = WorkingTree.open('tree')
204
# The new branch should have been created at the same level as
205
# 'branch', because we did not have a '/' segment
206
self.assertEqual(branch.base[:-1] + '2/', tree.branch.base)
208
def test_create_branch_short_name(self):
209
branch = self.make_branch('branch')
210
tree = branch.create_checkout('tree', lightweight=True)
211
tree.commit('one', rev_id='rev-1')
212
self.run_bzr('switch -b branch2', working_dir='tree')
213
tree = WorkingTree.open('tree')
214
# The new branch should have been created at the same level as
215
# 'branch', because we did not have a '/' segment
216
self.assertEqual(branch.base[:-1] + '2/', tree.branch.base)
218
def test_create_branch_directory_services(self):
219
branch = self.make_branch('branch')
220
tree = branch.create_checkout('tree', lightweight=True)
221
class FooLookup(object):
222
def look_up(self, name, url):
224
directories.register('foo:', FooLookup, 'Create branches named foo-')
225
self.addCleanup(directories.remove, 'foo:')
226
self.run_bzr('switch -b foo:branch2', working_dir='tree')
227
tree = WorkingTree.open('tree')
228
self.assertEndsWith(tree.branch.base, 'foo-branch2/')
230
def test_switch_with_post_switch_hook(self):
231
from bzrlib import branch as _mod_branch
233
_mod_branch.Branch.hooks.install_named_hook('post_switch',
235
self.make_branch_and_tree('branch')
236
self.run_bzr('branch branch branch2')
237
self.run_bzr('checkout branch checkout')
239
self.assertLength(0, calls)
240
out, err = self.run_bzr('switch ../branch2')
241
self.assertLength(1, calls)
243
def test_switch_lightweight_co_with_post_switch_hook(self):
244
from bzrlib import branch as _mod_branch
246
_mod_branch.Branch.hooks.install_named_hook('post_switch',
248
self.make_branch_and_tree('branch')
249
self.run_bzr('branch branch branch2')
250
self.run_bzr('checkout --lightweight branch checkout')
252
self.assertLength(0, calls)
253
out, err = self.run_bzr('switch ../branch2')
254
self.assertLength(1, calls)