~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_switch.py

  • Committer: Vincent Ladeuil
  • Date: 2010-04-28 10:33:44 UTC
  • mfrom: (5171.2.3 401599-strict-warnings)
  • mto: This revision was merged to the branch mainline in revision 5191.
  • Revision ID: v.ladeuil+lp@free.fr-20100428103344-e32qf3cn1avdd2cb
Don't mention --no-strict when we just issue the warning about unclean trees

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
import os
22
22
 
23
 
from bzrlib import (
24
 
        osutils,
25
 
        urlutils,
26
 
        branch,
27
 
        )
28
23
from bzrlib.workingtree import WorkingTree
29
 
from bzrlib.tests import (
30
 
        TestCaseWithTransport,
31
 
        script,
32
 
        )
 
24
from bzrlib.tests.blackbox import ExternalBase
33
25
from bzrlib.directory_service import directories
34
26
 
35
27
 
36
 
class TestSwitch(TestCaseWithTransport):
 
28
class TestSwitch(ExternalBase):
37
29
 
38
30
    def _create_sample_tree(self):
39
31
        tree = self.make_branch_and_tree('branch-1')
136
128
        """Using switch on a heavy checkout should find master sibling
137
129
 
138
130
        The behaviour of lighweight and heavy checkouts should be
139
 
        consistent when using the convenient "switch to sibling" feature
 
131
        consistentwhen using the convenient "switch to sibling" feature
140
132
        Both should switch to a sibling of the branch
141
133
        they are bound to, and not a sibling of themself"""
142
134
 
156
148
        tree = self._create_sample_tree()
157
149
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
158
150
        self.run_bzr(['switch', 'branch-1', '-r1'], working_dir='checkout')
159
 
        self.assertPathExists('checkout/file-1')
160
 
        self.assertPathDoesNotExist('checkout/file-2')
 
151
        self.failUnlessExists('checkout/file-1')
 
152
        self.failIfExists('checkout/file-2')
161
153
 
162
154
    def test_switch_only_revision(self):
163
155
        tree = self._create_sample_tree()
164
156
        checkout = tree.branch.create_checkout('checkout', lightweight=True)
165
 
        self.assertPathExists('checkout/file-1')
166
 
        self.assertPathExists('checkout/file-2')
 
157
        self.failUnlessExists('checkout/file-1')
 
158
        self.failUnlessExists('checkout/file-2')
167
159
        self.run_bzr(['switch', '-r1'], working_dir='checkout')
168
 
        self.assertPathExists('checkout/file-1')
169
 
        self.assertPathDoesNotExist('checkout/file-2')
 
160
        self.failUnlessExists('checkout/file-1')
 
161
        self.failIfExists('checkout/file-2')
170
162
        # Check that we don't accept a range
171
163
        self.run_bzr_error(
172
164
            ['bzr switch --revision takes exactly one revision identifier'],
175
167
    def prepare_lightweight_switch(self):
176
168
        branch = self.make_branch('branch')
177
169
        branch.create_checkout('tree', lightweight=True)
178
 
        osutils.rename('branch', 'branch1')
 
170
        os.rename('branch', 'branch1')
179
171
 
180
172
    def test_switch_lightweight_after_branch_moved(self):
181
173
        self.prepare_lightweight_switch()
259
251
        self.assertLength(0, calls)
260
252
        out, err = self.run_bzr('switch ../branch2')
261
253
        self.assertLength(1, calls)
262
 
 
263
 
    def test_switch_lightweight_directory(self):
264
 
        """Test --directory option"""
265
 
 
266
 
        # create a source branch
267
 
        a_tree = self.make_branch_and_tree('a')
268
 
        self.build_tree_contents([('a/a', 'initial\n')])
269
 
        a_tree.add('a')
270
 
        a_tree.commit(message='initial')
271
 
 
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')
276
 
 
277
 
        self.run_bzr('checkout --lightweight a checkout')
278
 
        self.run_bzr('switch --directory checkout b')
279
 
        self.assertFileEqual('initial\nmore\n', 'checkout/a')
280
 
 
281
 
 
282
 
class TestSwitchParentLocationBase(TestCaseWithTransport):
283
 
 
284
 
    def setUp(self):
285
 
        """Set up a repository and branch ready for testing."""
286
 
        super(TestSwitchParentLocationBase, self).setUp()
287
 
        self.script_runner = script.ScriptRunner()
288
 
        self.script_runner.run_script(self, '''
289
 
                $ bzr init-repo --no-trees repo
290
 
                Shared repository...
291
 
                Location:
292
 
                  shared repository: repo
293
 
                $ bzr init repo/trunk
294
 
                Created a repository branch...
295
 
                Using shared repository: ...
296
 
                ''')
297
 
 
298
 
    def assertParent(self, expected_parent, branch):
299
 
        """Verify that the parent is not None and is set correctly."""
300
 
        actual_parent = branch.get_parent()
301
 
        self.assertIsSameRealPath(urlutils.local_path_to_url(expected_parent),
302
 
                                  branch.get_parent())
303
 
 
304
 
 
305
 
class TestSwitchParentLocation(TestSwitchParentLocationBase):
306
 
 
307
 
    def _checkout_and_switch(self, option=''):
308
 
        self.script_runner.run_script(self, '''
309
 
                $ bzr checkout %(option)s repo/trunk checkout
310
 
                $ cd checkout
311
 
                $ bzr switch --create-branch switched
312
 
                2>Tree is up to date at revision 0.
313
 
                2>Switched to branch:...switched...
314
 
                $ cd ..
315
 
                ''' % locals())
316
 
        bound_branch = branch.Branch.open_containing('checkout')[0]
317
 
        master_branch = branch.Branch.open_containing('repo/switched')[0]
318
 
        return (bound_branch, master_branch)
319
 
 
320
 
    def test_switch_parent_lightweight(self):
321
 
        """Lightweight checkout using bzr switch."""
322
 
        bb, mb = self._checkout_and_switch(option='--lightweight')
323
 
        self.assertParent('repo/trunk', bb)
324
 
        self.assertParent('repo/trunk', mb)
325
 
 
326
 
    def test_switch_parent_heavyweight(self):
327
 
        """Heavyweight checkout using bzr switch."""
328
 
        bb, mb = self._checkout_and_switch()
329
 
        self.assertParent('repo/trunk', bb)
330
 
        self.assertParent('repo/trunk', mb)
331
 
 
332
 
 
333
 
class TestSwitchDoesntOpenMasterBranch(TestCaseWithTransport):
334
 
    # See https://bugs.launchpad.net/bzr/+bug/812285
335
 
    # "bzr switch --create-branch" can point the new branch's parent to the
336
 
    # master branch, but it doesn't have to open it to do so.
337
 
 
338
 
    def test_switch_create_doesnt_open_master_branch(self):
339
 
        master = self.make_branch_and_tree('master')
340
 
        master.commit('one')
341
 
        # Note: not a lightweight checkout
342
 
        checkout = master.branch.create_checkout('checkout')
343
 
        opened = []
344
 
        def open_hook(branch):
345
 
            # Just append the final directory of the branch
346
 
            name = branch.base.rstrip('/').rsplit('/', 1)[1]
347
 
            opened.append(name)
348
 
        branch.Branch.hooks.install_named_hook('open', open_hook,
349
 
                                               'open_hook_logger')
350
 
        self.run_bzr('switch --create-branch -d checkout feature')
351
 
        # We only open the master branch 1 time.
352
 
        # This test should be cleaner to write, but see bug:
353
 
        #  https://bugs.launchpad.net/bzr/+bug/812295
354
 
        self.assertEqual(1, opened.count('master'))