43
48
location = self.get_url()
44
49
out, err = self.run_bzr('info '+location, retcode=3)
45
50
self.assertEqual(out, '')
46
self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
51
self.assertEqual(err, 'brz: ERROR: Not a branch: "%s".\n' % location)
53
def test_info_empty_controldir(self):
54
self.make_bzrdir('ctrl')
55
out, err = self.run_bzr('info ctrl')
57
'Empty control directory (format: 2a or pack-0.92)\n'
59
' control directory: ctrl\n')
60
self.assertEqual(err, '')
62
def test_info_empty_controldir_verbose(self):
63
self.make_bzrdir('ctrl')
64
out, err = self.run_bzr('info -v ctrl')
65
self.assertEqualDiff(out,
66
'Empty control directory (format: 2a or pack-0.92)\n'
68
' control directory: ctrl\n\n'
70
' control: Meta directory format 1\n\n'
71
'Control directory:\n'
73
self.assertEqual(err, '')
75
def test_info_dangling_branch_reference(self):
76
br = self.make_branch('target')
77
br.create_checkout('from', lightweight=True)
78
shutil.rmtree('target')
79
out, err = self.run_bzr('info from')
81
'Dangling branch reference (format: 2a or pack-0.92)\n'
83
' control directory: from\n'
84
' checkout of branch: target\n')
85
self.assertEqual(err, '')
48
87
def test_info_standalone(self):
49
88
transport = self.get_transport()
51
90
# Create initial standalone branch
52
tree1 = self.make_branch_and_tree('standalone', 'weave')
91
tree1 = self.make_branch_and_tree('standalone', 'knit')
53
92
self.build_tree(['standalone/a'])
55
94
branch1 = tree1.branch
57
96
out, err = self.run_bzr('info standalone')
58
97
self.assertEqualDiff(
59
"""Standalone tree (format: weave)
98
"""Standalone tree (format: knit)
61
100
branch root: standalone
65
104
# Standalone branch - verbose mode
66
105
out, err = self.run_bzr('info standalone -v')
67
106
self.assertEqualDiff(
68
"""Standalone tree (format: weave)
107
"""Standalone tree (format: knit)
70
109
branch root: standalone
73
control: All-in-one format 6
74
working tree: Working tree format 2
75
branch: Branch format 4
76
repository: Weave repository format 6
112
control: Meta directory format 1
113
working tree: Working tree format 3
114
branch: Branch format 5
115
repository: Knit repository format 1
78
120
In the working tree:
96
138
# Standalone branch - really verbose mode
97
139
out, err = self.run_bzr('info standalone -vv')
98
140
self.assertEqualDiff(
99
"""Standalone tree (format: weave)
141
"""Standalone tree (format: knit)
101
143
branch root: standalone
104
control: All-in-one format 6
105
working tree: Working tree format 2
106
branch: Branch format 4
107
repository: Weave repository format 6
146
control: Meta directory format 1
147
working tree: Working tree format 3
148
branch: Branch format 5
149
repository: Knit repository format 1
109
154
In the working tree:
185
233
# Branch and bind to standalone, needs upgrade to metadir
186
234
# (creates backup as unknown)
187
235
branch1.bzrdir.sprout('bound')
188
knit1_format = bzrdir.format_registry.make_bzrdir('knit')
236
knit1_format = controldir.format_registry.make_bzrdir('knit')
189
237
upgrade.upgrade('bound', knit1_format)
190
branch3 = bzrdir.BzrDir.open('bound').open_branch()
238
branch3 = controldir.ControlDir.open('bound').open_branch()
191
239
branch3.bind(branch1)
192
240
bound_tree = branch3.bzrdir.open_workingtree()
193
241
out, err = self.run_bzr('info -v bound')
309
""" % (self._repo_strings, datestring_first, datestring_first,), out)
370
""" % (format_description, datestring_first, datestring_first,), out)
310
371
self.assertEqual('', err)
312
373
# Update initial standalone branch
313
374
self.build_tree(['standalone/b'])
315
376
tree1.commit('commit two')
316
rev = branch1.repository.get_revision(branch1.revision_history()[-1])
377
rev = branch1.repository.get_revision(branch1.last_revision())
317
378
datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
319
380
# Out of date branched standalone branch will not be detected
320
381
out, err = self.run_bzr('info -v branch')
321
382
self.assertEqualDiff(
322
"""Standalone tree (format: weave)
383
"""Standalone tree (format: knit)
324
385
branch root: branch
473
""" % (self._repo_strings, datestring_first, datestring_last,), out)
546
""" % (format_description, datestring_first, datestring_last,), out)
474
547
self.assertEqual('', err)
476
549
def test_info_standalone_no_tree(self):
477
550
# create standalone branch without a working tree
478
format = bzrdir.format_registry.make_bzrdir('default')
551
format = controldir.format_registry.make_bzrdir('default')
479
552
branch = self.make_branch('branch')
480
553
repo = branch.repository
481
554
out, err = self.run_bzr('info branch -v')
1070
1197
self.assertEqual('', err)
1199
def test_info_unshared_repository_with_colocated_branches(self):
1200
format = controldir.format_registry.make_bzrdir('development-colo')
1201
transport = self.get_transport()
1203
# Create unshared repository
1204
repo = self.make_repository('repo', shared=False, format=format)
1205
repo.set_make_working_trees(True)
1206
repo.bzrdir.create_branch(name='foo')
1207
out, err = self.run_bzr('info repo')
1208
self.assertEqualDiff(
1209
"""Unshared repository with trees and colocated branches (format: development-colo)
1213
self.assertEqual('', err)
1072
1215
def assertCheckoutStatusOutput(self,
1073
1216
command_string, lco_tree, shared_repo=None,
1074
1217
repo_branch=None,
1217
1363
format=bzrdir.BzrDirMetaFormat1())
1218
1364
repo.set_make_working_trees(False)
1219
1365
repo.bzrdir.root_transport.mkdir('branch')
1220
repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
1221
format=bzrdir.BzrDirMetaFormat1())
1366
repo_branch = controldir.ControlDir.create_branch_convenience(
1367
'repo/branch', format=bzrdir.BzrDirMetaFormat1())
1222
1368
# Do a heavy checkout
1223
1369
transport.mkdir('tree')
1224
1370
transport.mkdir('tree/checkout')
1225
co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1226
format=bzrdir.BzrDirMetaFormat1())
1371
co_branch = controldir.ControlDir.create_branch_convenience(
1372
'tree/checkout', format=bzrdir.BzrDirMetaFormat1())
1227
1373
co_branch.bind(repo_branch)
1228
1374
# Do a light checkout of the heavy one
1229
1375
transport.mkdir('tree/lightcheckout')
1230
1376
lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1231
branch.BranchReferenceFormat().initialize(lco_dir,
1232
target_branch=co_branch)
1377
lco_dir.set_branch_reference(co_branch)
1233
1378
lco_dir.create_workingtree()
1234
1379
lco_tree = lco_dir.open_workingtree()
1320
1465
lco_tree.branch.unlock()
1322
1467
if sys.platform == 'win32':
1323
self.knownFailure('Win32 cannot run "bzr info"'
1468
self.knownFailure('Win32 cannot run "brz info"'
1324
1469
' when the tree is locked.')
1326
def test_info_locking_oslocks(self):
1327
if sys.platform == "win32":
1328
self.skip("don't use oslocks on win32 in unix manner")
1329
# This test tests old (all-in-one, OS lock using) behaviour which
1330
# simply cannot work on windows (and is indeed why we changed our
1331
# design. As such, don't try to remove the thisFailsStrictLockCheck
1333
self.thisFailsStrictLockCheck()
1335
tree = self.make_branch_and_tree('branch',
1336
format=bzrdir.BzrDirFormat6())
1338
# Test all permutations of locking the working tree, branch and repository
1339
# XXX: Well not yet, as we can't query oslocks yet. Currently, it's
1340
# implemented by raising NotImplementedError and get_physical_lock_status()
1341
# always returns false. This makes bzr info hide the lock status. (Olaf)
1345
out, err = self.run_bzr('info -v branch')
1346
self.assertEqualDiff(
1347
"""Standalone tree (format: weave)
1352
control: All-in-one format 6
1353
working tree: Working tree format 2
1354
branch: Branch format 4
1357
In the working tree:
1365
0 versioned subdirectories
1372
""" % ('branch', tree.branch.repository._format.get_format_description(),
1374
self.assertEqual('', err)
1377
out, err = self.run_bzr('info -v branch')
1378
self.assertEqualDiff(
1379
"""Standalone tree (format: weave)
1384
control: All-in-one format 6
1385
working tree: Working tree format 2
1386
branch: Branch format 4
1389
In the working tree:
1397
0 versioned subdirectories
1404
""" % ('branch', tree.branch.repository._format.get_format_description(),
1406
self.assertEqual('', err)
1409
1471
def test_info_stacked(self):
1410
1472
# We have a mainline
1411
1473
trunk_tree = self.make_branch_and_tree('mainline',
1424
1486
stacked on: mainline
1426
1488
self.assertEqual("", err)
1490
def test_info_revinfo_optional(self):
1491
tree = self.make_branch_and_tree('.')
1492
def last_revision_info(self):
1493
raise errors.UnsupportedOperation(last_revision_info, self)
1495
branch.Branch, "last_revision_info", last_revision_info)
1496
out, err = self.run_bzr('info -v .')
1498
"""Standalone tree (format: 2a)
1503
control: Meta directory format 1
1504
working tree: Working tree format 6
1505
branch: Branch format 7
1506
repository: Repository format 2a - rich roots, group compression and chk inventories
1511
In the working tree:
1519
0 versioned subdirectories
1521
self.assertEqual("", err)
1523
def test_info_shows_colocated_branches(self):
1524
bzrdir = self.make_branch('.', format='development-colo').bzrdir
1525
bzrdir.create_branch(name="colo1")
1526
bzrdir.create_branch(name="colo2")
1527
bzrdir.create_branch(name="colo3")
1528
out, err = self.run_bzr('info -v .')
1529
self.assertEqualDiff(
1530
"""Standalone branch (format: development-colo)
1535
control: Meta directory format 1 with support for colocated branches
1536
branch: Branch format 7
1537
repository: Repository format 2a - rich roots, group compression and chk inventories
1548
self.assertEqual("", err)
1551
class TestSmartServerInfo(tests.TestCaseWithTransport):
1553
def test_simple_branch_info(self):
1554
self.setup_smart_server_with_call_log()
1555
t = self.make_branch_and_tree('branch')
1556
self.build_tree_contents([('branch/foo', 'thecontents')])
1559
self.reset_smart_call_log()
1560
out, err = self.run_bzr(['info', self.get_url('branch')])
1561
# This figure represent the amount of work to perform this use case. It
1562
# is entirely ok to reduce this number if a test fails due to rpc_count
1563
# being too low. If rpc_count increases, more network roundtrips have
1564
# become necessary for this use case. Please do not adjust this number
1565
# upwards without agreement from bzr's network support maintainers.
1566
self.assertLength(10, self.hpss_calls)
1567
self.assertLength(1, self.hpss_connections)
1568
self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
1570
def test_verbose_branch_info(self):
1571
self.setup_smart_server_with_call_log()
1572
t = self.make_branch_and_tree('branch')
1573
self.build_tree_contents([('branch/foo', 'thecontents')])
1576
self.reset_smart_call_log()
1577
out, err = self.run_bzr(['info', '-v', self.get_url('branch')])
1578
# This figure represent the amount of work to perform this use case. It
1579
# is entirely ok to reduce this number if a test fails due to rpc_count
1580
# being too low. If rpc_count increases, more network roundtrips have
1581
# become necessary for this use case. Please do not adjust this number
1582
# upwards without agreement from bzr's network support maintainers.
1583
self.assertLength(14, self.hpss_calls)
1584
self.assertLength(1, self.hpss_connections)
1585
self.assertThat(self.hpss_calls, ContainsNoVfsCalls)