~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Andrew Bennetts
  • Date: 2009-04-02 05:53:12 UTC
  • mto: This revision was merged to the branch mainline in revision 4242.
  • Revision ID: andrew.bennetts@canonical.com-20090402055312-h7mvgumvm7e620mj
Fix nits in spelling and naming.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2011 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
19
19
 
20
20
import os
21
21
 
22
 
from bzrlib import (
23
 
    branch,
24
 
    bzrdir,
25
 
    errors,
26
 
    revision as _mod_revision,
27
 
    )
 
22
from bzrlib import (branch, bzrdir, errors, repository)
28
23
from bzrlib.repofmt.knitrepo import RepositoryFormatKnit1
29
 
from bzrlib.tests import TestCaseWithTransport
30
 
from bzrlib.tests import (
31
 
    fixtures,
32
 
    script,
33
 
    test_server,
34
 
    )
35
 
from bzrlib.tests.features import (
36
 
    HardlinkFeature,
37
 
    )
38
 
from bzrlib.tests.blackbox import test_switch
 
24
from bzrlib.tests.blackbox import ExternalBase
 
25
from bzrlib.tests import HardlinkFeature
39
26
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
40
 
from bzrlib.tests.script import run_script
41
27
from bzrlib.urlutils import local_path_to_url, strip_trailing_slash
42
28
from bzrlib.workingtree import WorkingTree
43
29
 
44
30
 
45
 
class TestBranch(TestCaseWithTransport):
 
31
class TestBranch(ExternalBase):
46
32
 
47
33
    def example_branch(self, path='.'):
48
34
        tree = self.make_branch_and_tree(path)
63
49
        self.assertFalse(b._transport.has('branch-name'))
64
50
        b.bzrdir.open_workingtree().commit(message='foo', allow_pointless=True)
65
51
 
66
 
    def test_branch_broken_pack(self):
67
 
        """branching with a corrupted pack file."""
68
 
        self.example_branch('a')
69
 
        #now add some random corruption
70
 
        fname = 'a/.bzr/repository/packs/' + os.listdir('a/.bzr/repository/packs')[0]
71
 
        with open(fname, 'rb+') as f:
72
 
            f.seek(750)
73
 
            f.write("\xff")
74
 
        self.run_bzr_error(['Corruption while decompressing repository file'], 
75
 
                            'branch a b', retcode=3)
76
 
 
77
 
    def test_branch_switch_no_branch(self):
78
 
        # No branch in the current directory:
79
 
        #  => new branch will be created, but switch fails
80
 
        self.example_branch('a')
81
 
        self.make_repository('current')
82
 
        self.run_bzr_error(['No WorkingTree exists for'],
83
 
            'branch --switch ../a ../b', working_dir='current')
84
 
        a = branch.Branch.open('a')
85
 
        b = branch.Branch.open('b')
86
 
        self.assertEqual(a.last_revision(), b.last_revision())
87
 
 
88
 
    def test_branch_switch_no_wt(self):
89
 
        # No working tree in the current directory:
90
 
        #  => new branch will be created, but switch fails and the current
91
 
        #     branch is unmodified
92
 
        self.example_branch('a')
93
 
        self.make_branch('current')
94
 
        self.run_bzr_error(['No WorkingTree exists for'],
95
 
            'branch --switch ../a ../b', working_dir='current')
96
 
        a = branch.Branch.open('a')
97
 
        b = branch.Branch.open('b')
98
 
        self.assertEqual(a.last_revision(), b.last_revision())
99
 
        work = branch.Branch.open('current')
100
 
        self.assertEqual(work.last_revision(), _mod_revision.NULL_REVISION)
101
 
 
102
 
    def test_branch_switch_no_checkout(self):
103
 
        # Standalone branch in the current directory:
104
 
        #  => new branch will be created, but switch fails and the current
105
 
        #     branch is unmodified
106
 
        self.example_branch('a')
107
 
        self.make_branch_and_tree('current')
108
 
        self.run_bzr_error(['Cannot switch a branch, only a checkout'],
109
 
            'branch --switch ../a ../b', working_dir='current')
110
 
        a = branch.Branch.open('a')
111
 
        b = branch.Branch.open('b')
112
 
        self.assertEqual(a.last_revision(), b.last_revision())
113
 
        work = branch.Branch.open('current')
114
 
        self.assertEqual(work.last_revision(), _mod_revision.NULL_REVISION)
115
 
 
116
 
    def test_branch_switch_checkout(self):
117
 
        # Checkout in the current directory:
118
 
        #  => new branch will be created and checkout bound to the new branch
119
 
        self.example_branch('a')
120
 
        self.run_bzr('checkout a current')
121
 
        out, err = self.run_bzr('branch --switch ../a ../b', working_dir='current')
122
 
        a = branch.Branch.open('a')
123
 
        b = branch.Branch.open('b')
124
 
        self.assertEqual(a.last_revision(), b.last_revision())
125
 
        work = WorkingTree.open('current')
126
 
        self.assertEndsWith(work.branch.get_bound_location(), '/b/')
127
 
        self.assertContainsRe(err, "Switched to branch: .*/b/")
128
 
 
129
 
    def test_branch_switch_lightweight_checkout(self):
130
 
        # Lightweight checkout in the current directory:
131
 
        #  => new branch will be created and lightweight checkout pointed to
132
 
        #     the new branch
133
 
        self.example_branch('a')
134
 
        self.run_bzr('checkout --lightweight a current')
135
 
        out, err = self.run_bzr('branch --switch ../a ../b', working_dir='current')
136
 
        a = branch.Branch.open('a')
137
 
        b = branch.Branch.open('b')
138
 
        self.assertEqual(a.last_revision(), b.last_revision())
139
 
        work = WorkingTree.open('current')
140
 
        self.assertEndsWith(work.branch.base, '/b/')
141
 
        self.assertContainsRe(err, "Switched to branch: .*/b/")
142
 
 
143
52
    def test_branch_only_copies_history(self):
144
53
        # Knit branches should only push the history for the current revision.
145
54
        format = bzrdir.BzrDirMetaFormat1()
184
93
        self.build_tree(['source/file1'])
185
94
        source.add('file1')
186
95
        source.commit('added file')
187
 
        out, err = self.run_bzr(['branch', 'source', 'target', '--hardlink'])
 
96
        self.run_bzr(['branch', 'source', 'target', '--hardlink'])
188
97
        source_stat = os.stat('source/file1')
189
98
        target_stat = os.stat('target/file1')
190
99
        self.assertEqual(source_stat, target_stat)
191
100
 
192
 
    def test_branch_files_from(self):
193
 
        source = self.make_branch_and_tree('source')
194
 
        self.build_tree(['source/file1'])
195
 
        source.add('file1')
196
 
        source.commit('added file')
197
 
        out, err = self.run_bzr('branch source target --files-from source')
198
 
        self.assertPathExists('target/file1')
199
 
 
200
 
    def test_branch_files_from_hardlink(self):
201
 
        self.requireFeature(HardlinkFeature)
202
 
        source = self.make_branch_and_tree('source')
203
 
        self.build_tree(['source/file1'])
204
 
        source.add('file1')
205
 
        source.commit('added file')
206
 
        source.bzrdir.sprout('second')
207
 
        out, err = self.run_bzr('branch source target --files-from second'
208
 
                                ' --hardlink')
209
 
        source_stat = os.stat('source/file1')
210
 
        second_stat = os.stat('second/file1')
211
 
        target_stat = os.stat('target/file1')
212
 
        self.assertNotEqual(source_stat, target_stat)
213
 
        self.assertEqual(second_stat, target_stat)
214
 
 
215
101
    def test_branch_standalone(self):
216
102
        shared_repo = self.make_repository('repo', shared=True)
217
103
        self.example_branch('source')
224
110
    def test_branch_no_tree(self):
225
111
        self.example_branch('source')
226
112
        self.run_bzr('branch --no-tree source target')
227
 
        self.assertPathDoesNotExist('target/hello')
228
 
        self.assertPathDoesNotExist('target/goodbye')
229
 
 
230
 
    def test_branch_into_existing_dir(self):
231
 
        self.example_branch('a')
232
 
        # existing dir with similar files but no .bzr dir
233
 
        self.build_tree_contents([('b/',)])
234
 
        self.build_tree_contents([('b/hello', 'bar')])  # different content
235
 
        self.build_tree_contents([('b/goodbye', 'baz')])# same content
236
 
        # fails without --use-existing-dir
237
 
        out,err = self.run_bzr('branch a b', retcode=3)
238
 
        self.assertEqual('', out)
239
 
        self.assertEqual('bzr: ERROR: Target directory "b" already exists.\n',
240
 
            err)
241
 
        # force operation
242
 
        self.run_bzr('branch a b --use-existing-dir')
243
 
        # check conflicts
244
 
        self.assertPathExists('b/hello.moved')
245
 
        self.assertPathDoesNotExist('b/godbye.moved')
246
 
        # we can't branch into branch
247
 
        out,err = self.run_bzr('branch a b --use-existing-dir', retcode=3)
248
 
        self.assertEqual('', out)
249
 
        self.assertEqual('bzr: ERROR: Already a branch: "b".\n', err)
250
 
 
251
 
    def test_branch_bind(self):
252
 
        self.example_branch('a')
253
 
        out, err = self.run_bzr('branch a b --bind')
254
 
        self.assertEndsWith(err, "New branch bound to a\n")
255
 
        b = branch.Branch.open('b')
256
 
        self.assertEndsWith(b.get_bound_location(), '/a/')
257
 
 
258
 
    def test_branch_with_post_branch_init_hook(self):
259
 
        calls = []
260
 
        branch.Branch.hooks.install_named_hook('post_branch_init',
261
 
            calls.append, None)
262
 
        self.assertLength(0, calls)
263
 
        self.example_branch('a')
264
 
        self.assertLength(1, calls)
265
 
        self.run_bzr('branch a b')
266
 
        self.assertLength(2, calls)
267
 
 
268
 
    def test_checkout_with_post_branch_init_hook(self):
269
 
        calls = []
270
 
        branch.Branch.hooks.install_named_hook('post_branch_init',
271
 
            calls.append, None)
272
 
        self.assertLength(0, calls)
273
 
        self.example_branch('a')
274
 
        self.assertLength(1, calls)
275
 
        self.run_bzr('checkout a b')
276
 
        self.assertLength(2, calls)
277
 
 
278
 
    def test_lightweight_checkout_with_post_branch_init_hook(self):
279
 
        calls = []
280
 
        branch.Branch.hooks.install_named_hook('post_branch_init',
281
 
            calls.append, None)
282
 
        self.assertLength(0, calls)
283
 
        self.example_branch('a')
284
 
        self.assertLength(1, calls)
285
 
        self.run_bzr('checkout --lightweight a b')
286
 
        self.assertLength(2, calls)
287
 
 
288
 
    def test_branch_fetches_all_tags(self):
289
 
        builder = self.make_branch_builder('source')
290
 
        source = fixtures.build_branch_with_non_ancestral_rev(builder)
291
 
        source.tags.set_tag('tag-a', 'rev-2')
292
 
        source.get_config().set_user_option('branch.fetch_tags', 'True')
293
 
        # Now source has a tag not in its ancestry.  Make a branch from it.
294
 
        self.run_bzr('branch source new-branch')
295
 
        new_branch = branch.Branch.open('new-branch')
296
 
        # The tag is present, and so is its revision.
297
 
        self.assertEqual('rev-2', new_branch.tags.lookup_tag('tag-a'))
298
 
        new_branch.repository.get_revision('rev-2')
299
 
 
300
 
 
301
 
class TestBranchStacked(TestCaseWithTransport):
 
113
        self.failIfExists('target/hello')
 
114
        self.failIfExists('target/goodbye')
 
115
 
 
116
 
 
117
class TestBranchStacked(ExternalBase):
302
118
    """Tests for branch --stacked"""
303
119
 
 
120
    def check_shallow_branch(self, branch_revid, stacked_on):
 
121
        """Assert that the branch 'newbranch' has been published correctly.
 
122
 
 
123
        :param stacked_on: url of a branch this one is stacked upon.
 
124
        :param branch_revid: a revision id that should be the only
 
125
            revision present in the stacked branch, and it should not be in
 
126
            the reference branch.
 
127
        """
 
128
        new_branch = branch.Branch.open('newbranch')
 
129
        # The branch refers to the mainline
 
130
        self.assertEqual(stacked_on, new_branch.get_stacked_on_url())
 
131
        # and the branch's work was pushed
 
132
        self.assertTrue(new_branch.repository.has_revision(branch_revid))
 
133
        # The newly committed revision shoud be present in the stacked branch,
 
134
        # but not in the stacked-on branch.  Because stacking is set up by the
 
135
        # branch object, if we open the stacked branch's repository directly,
 
136
        # bypassing the branch, we see only what's in the stacked repository.
 
137
        stacked_repo = bzrdir.BzrDir.open('newbranch').open_repository()
 
138
        stacked_repo_revisions = set(stacked_repo.all_revision_ids())
 
139
        if len(stacked_repo_revisions) != 1:
 
140
            self.fail("wrong revisions in stacked repository: %r"
 
141
                % (stacked_repo_revisions,))
 
142
 
304
143
    def assertRevisionInRepository(self, repo_path, revid):
305
144
        """Check that a revision is in a repository, disregarding stacking."""
306
145
        repo = bzrdir.BzrDir.open(repo_path).open_repository()
320
159
        """Branching a stacked branch is not stacked by default"""
321
160
        # We have a mainline
322
161
        trunk_tree = self.make_branch_and_tree('target',
323
 
            format='1.9')
 
162
            format='development')
324
163
        trunk_tree.commit('mainline')
325
164
        # and a branch from it which is stacked
326
165
        branch_tree = self.make_branch_and_tree('branch',
327
 
            format='1.9')
 
166
            format='development')
328
167
        branch_tree.branch.set_stacked_on_url(trunk_tree.branch.base)
329
168
        # with some work on it
330
 
        work_tree = trunk_tree.branch.bzrdir.sprout('local').open_workingtree()
331
 
        work_tree.commit('moar work plz')
332
 
        work_tree.branch.push(branch_tree.branch)
 
169
        branch_tree.commit('moar work plz')
333
170
        # branching our local branch gives us a new stacked branch pointing at
334
171
        # mainline.
335
172
        out, err = self.run_bzr(['branch', 'branch', 'newbranch'])
336
173
        self.assertEqual('', out)
337
 
        self.assertEqual('Branched 2 revision(s).\n',
 
174
        self.assertEqual('Branched 1 revision(s).\n',
338
175
            err)
339
176
        # it should have preserved the branch format, and so it should be
340
177
        # capable of supporting stacking, but not actually have a stacked_on
346
183
        """Asking to stack on a stacked branch does work"""
347
184
        # We have a mainline
348
185
        trunk_tree = self.make_branch_and_tree('target',
349
 
            format='1.9')
 
186
            format='development')
350
187
        trunk_revid = trunk_tree.commit('mainline')
351
188
        # and a branch from it which is stacked
352
189
        branch_tree = self.make_branch_and_tree('branch',
353
 
            format='1.9')
 
190
            format='development')
354
191
        branch_tree.branch.set_stacked_on_url(trunk_tree.branch.base)
355
192
        # with some work on it
356
 
        work_tree = trunk_tree.branch.bzrdir.sprout('local').open_workingtree()
357
 
        branch_revid = work_tree.commit('moar work plz')
358
 
        work_tree.branch.push(branch_tree.branch)
 
193
        branch_revid = branch_tree.commit('moar work plz')
359
194
        # you can chain branches on from there
360
195
        out, err = self.run_bzr(['branch', 'branch', '--stacked', 'branch2'])
361
196
        self.assertEqual('', out)
364
199
        self.assertEqual(branch_tree.branch.base,
365
200
            branch.Branch.open('branch2').get_stacked_on_url())
366
201
        branch2_tree = WorkingTree.open('branch2')
367
 
        branch2_revid = work_tree.commit('work on second stacked branch')
368
 
        work_tree.branch.push(branch2_tree.branch)
 
202
        branch2_revid = branch2_tree.commit('work on second stacked branch')
369
203
        self.assertRevisionInRepository('branch2', branch2_revid)
370
204
        self.assertRevisionsInBranchRepository(
371
205
            [trunk_revid, branch_revid, branch2_revid],
374
208
    def test_branch_stacked(self):
375
209
        # We have a mainline
376
210
        trunk_tree = self.make_branch_and_tree('mainline',
377
 
            format='1.9')
 
211
            format='development')
378
212
        original_revid = trunk_tree.commit('mainline')
379
213
        self.assertRevisionInRepository('mainline', original_revid)
380
214
        # and a branch from it which is stacked
384
218
        self.assertEqual('Created new stacked branch referring to %s.\n' %
385
219
            trunk_tree.branch.base, err)
386
220
        self.assertRevisionNotInRepository('newbranch', original_revid)
387
 
        new_branch = branch.Branch.open('newbranch')
388
 
        self.assertEqual(trunk_tree.branch.base, new_branch.get_stacked_on_url())
 
221
        new_tree = WorkingTree.open('newbranch')
 
222
        new_revid = new_tree.commit('new work')
 
223
        self.check_shallow_branch(new_revid, trunk_tree.branch.base)
389
224
 
390
225
    def test_branch_stacked_from_smart_server(self):
391
226
        # We can branch stacking on a smart server
392
 
        self.transport_server = test_server.SmartTCPServer_for_testing
393
 
        trunk = self.make_branch('mainline', format='1.9')
 
227
        from bzrlib.smart.server import SmartTCPServer_for_testing
 
228
        self.transport_server = SmartTCPServer_for_testing
 
229
        trunk = self.make_branch('mainline', format='development')
394
230
        out, err = self.run_bzr(
395
231
            ['branch', '--stacked', self.get_url('mainline'), 'shallow'])
396
232
 
401
237
            ['branch', '--stacked', 'trunk', 'shallow'])
402
238
        # We should notify the user that we upgraded their format
403
239
        self.assertEqualDiff(
404
 
            'Source repository format does not support stacking, using format:\n'
 
240
            'Source format does not support stacking, using format: \'1.6\'\n'
405
241
            '  Packs 5 (adds stacking support, requires bzr 1.6)\n'
406
 
            'Source branch format does not support stacking, using format:\n'
407
 
            '  Branch format 7\n'
408
 
            'Doing on-the-fly conversion from RepositoryFormatKnitPack1() to RepositoryFormatKnitPack5().\n'
409
 
            'This may take some time. Upgrade the repositories to the same format for better performance.\n'
 
242
            '\n'
410
243
            'Created new stacked branch referring to %s.\n' % (trunk.base,),
411
244
            err)
412
245
 
416
249
            ['branch', '--stacked', 'trunk', 'shallow'])
417
250
        # We should notify the user that we upgraded their format
418
251
        self.assertEqualDiff(
419
 
            'Source repository format does not support stacking, using format:\n'
 
252
            'Source format does not support stacking, using format:'
 
253
            ' \'1.6.1-rich-root\'\n'
420
254
            '  Packs 5 rich-root (adds stacking support, requires bzr 1.6.1)\n'
421
 
            'Source branch format does not support stacking, using format:\n'
422
 
            '  Branch format 7\n'
423
 
            'Doing on-the-fly conversion from RepositoryFormatKnitPack4() to RepositoryFormatKnitPack5RichRoot().\n'
424
 
            'This may take some time. Upgrade the repositories to the same format for better performance.\n'
 
255
            '\n'
425
256
            'Created new stacked branch referring to %s.\n' % (trunk.base,),
426
257
            err)
427
258
 
428
259
 
429
 
class TestSmartServerBranching(TestCaseWithTransport):
 
260
class TestSmartServerBranching(ExternalBase):
430
261
 
431
262
    def test_branch_from_trivial_branch_to_same_server_branch_acceptance(self):
432
263
        self.setup_smart_server_with_call_log()
436
267
        self.reset_smart_call_log()
437
268
        out, err = self.run_bzr(['branch', self.get_url('from'),
438
269
            self.get_url('target')])
 
270
        rpc_count = len(self.hpss_calls)
439
271
        # This figure represent the amount of work to perform this use case. It
440
272
        # is entirely ok to reduce this number if a test fails due to rpc_count
441
273
        # being too low. If rpc_count increases, more network roundtrips have
442
274
        # become necessary for this use case. Please do not adjust this number
443
275
        # upwards without agreement from bzr's network support maintainers.
444
 
        self.assertLength(37, self.hpss_calls)
 
276
        self.assertEqual(53, rpc_count)
445
277
 
446
278
    def test_branch_from_trivial_branch_streaming_acceptance(self):
447
279
        self.setup_smart_server_with_call_log()
451
283
        self.reset_smart_call_log()
452
284
        out, err = self.run_bzr(['branch', self.get_url('from'),
453
285
            'local-target'])
 
286
        rpc_count = len(self.hpss_calls)
454
287
        # This figure represent the amount of work to perform this use case. It
455
288
        # is entirely ok to reduce this number if a test fails due to rpc_count
456
289
        # being too low. If rpc_count increases, more network roundtrips have
457
290
        # become necessary for this use case. Please do not adjust this number
458
291
        # upwards without agreement from bzr's network support maintainers.
459
 
        self.assertLength(10, self.hpss_calls)
 
292
        self.assertEqual(10, rpc_count)
460
293
 
461
294
    def test_branch_from_trivial_stacked_branch_streaming_acceptance(self):
462
295
        self.setup_smart_server_with_call_log()
465
298
            t.commit(message='commit %d' % count)
466
299
        tree2 = t.branch.bzrdir.sprout('feature', stacked=True
467
300
            ).open_workingtree()
468
 
        local_tree = t.branch.bzrdir.sprout('local-working').open_workingtree()
469
 
        local_tree.commit('feature change')
470
 
        local_tree.branch.push(tree2.branch)
 
301
        tree2.commit('feature change')
471
302
        self.reset_smart_call_log()
472
303
        out, err = self.run_bzr(['branch', self.get_url('feature'),
473
304
            'local-target'])
476
307
        # being too low. If rpc_count increases, more network roundtrips have
477
308
        # become necessary for this use case. Please do not adjust this number
478
309
        # upwards without agreement from bzr's network support maintainers.
479
 
        self.assertLength(15, self.hpss_calls)
480
 
 
481
 
    def test_branch_from_branch_with_tags(self):
482
 
        self.setup_smart_server_with_call_log()
483
 
        builder = self.make_branch_builder('source')
484
 
        source = fixtures.build_branch_with_non_ancestral_rev(builder)
485
 
        source.get_config().set_user_option('branch.fetch_tags', 'True')
486
 
        source.tags.set_tag('tag-a', 'rev-2')
487
 
        source.tags.set_tag('tag-missing', 'missing-rev')
488
 
        # Now source has a tag not in its ancestry.  Make a branch from it.
489
 
        self.reset_smart_call_log()
490
 
        out, err = self.run_bzr(['branch', self.get_url('source'), 'target'])
491
 
        # This figure represent the amount of work to perform this use case. It
492
 
        # is entirely ok to reduce this number if a test fails due to rpc_count
493
 
        # being too low. If rpc_count increases, more network roundtrips have
494
 
        # become necessary for this use case. Please do not adjust this number
495
 
        # upwards without agreement from bzr's network support maintainers.
496
 
        self.assertLength(10, self.hpss_calls)
497
 
 
498
 
    def test_branch_to_stacked_from_trivial_branch_streaming_acceptance(self):
499
 
        self.setup_smart_server_with_call_log()
500
 
        t = self.make_branch_and_tree('from')
501
 
        for count in range(9):
502
 
            t.commit(message='commit %d' % count)
503
 
        self.reset_smart_call_log()
504
 
        out, err = self.run_bzr(['branch', '--stacked', self.get_url('from'),
505
 
            'local-target'])
506
 
        # XXX: the number of hpss calls for this case isn't deterministic yet,
507
 
        # so we can't easily assert about the number of calls.
508
 
        #self.assertLength(XXX, self.hpss_calls)
509
 
        # We can assert that none of the calls were readv requests for rix
510
 
        # files, though (demonstrating that at least get_parent_map calls are
511
 
        # not using VFS RPCs).
512
 
        readvs_of_rix_files = [
513
 
            c for c in self.hpss_calls
514
 
            if c.call.method == 'readv' and c.call.args[-1].endswith('.rix')]
515
 
        self.assertLength(0, readvs_of_rix_files)
 
310
        self.assertLength(23, self.hpss_calls)
516
311
 
517
312
 
518
313
class TestRemoteBranch(TestCaseWithSFTPServer):
538
333
        # Ensure that no working tree what created remotely
539
334
        self.assertFalse(t.has('remote/file'))
540
335
 
541
 
 
542
 
class TestDeprecatedAliases(TestCaseWithTransport):
543
 
 
544
 
    def test_deprecated_aliases(self):
545
 
        """bzr branch can be called clone or get, but those names are deprecated.
546
 
 
547
 
        See bug 506265.
548
 
        """
549
 
        for command in ['clone', 'get']:
550
 
            run_script(self, """
551
 
            $ bzr %(command)s A B
552
 
            2>The command 'bzr %(command)s' has been deprecated in bzr 2.4. Please use 'bzr branch' instead.
553
 
            2>bzr: ERROR: Not a branch...
554
 
            """ % locals())
555
 
 
556
 
 
557
 
class TestBranchParentLocation(test_switch.TestSwitchParentLocationBase):
558
 
 
559
 
    def _checkout_and_branch(self, option=''):
560
 
        self.script_runner.run_script(self, '''
561
 
                $ bzr checkout %(option)s repo/trunk checkout
562
 
                $ cd checkout
563
 
                $ bzr branch --switch ../repo/trunk ../repo/branched
564
 
                2>Branched 0 revision(s).
565
 
                2>Tree is up to date at revision 0.
566
 
                2>Switched to branch:...branched...
567
 
                $ cd ..
568
 
                ''' % locals())
569
 
        bound_branch = branch.Branch.open_containing('checkout')[0]
570
 
        master_branch = branch.Branch.open_containing('repo/branched')[0]
571
 
        return (bound_branch, master_branch)
572
 
 
573
 
    def test_branch_switch_parent_lightweight(self):
574
 
        """Lightweight checkout using bzr branch --switch."""
575
 
        bb, mb = self._checkout_and_branch(option='--lightweight')
576
 
        self.assertParent('repo/trunk', bb)
577
 
        self.assertParent('repo/trunk', mb)
578
 
 
579
 
    def test_branch_switch_parent_heavyweight(self):
580
 
        """Heavyweight checkout using bzr branch --switch."""
581
 
        bb, mb = self._checkout_and_branch()
582
 
        self.assertParent('repo/trunk', bb)
583
 
        self.assertParent('repo/trunk', mb)