1
# Copyright (C) 2006-2010 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
"""Tests for the info command of bzr."""
32
from bzrlib.transport import memory
35
class TestInfo(tests.TestCaseWithTransport):
38
super(TestInfo, self).setUp()
39
self._repo_strings = "2a"
41
def test_info_non_existing(self):
42
self.vfs_transport_factory = memory.MemoryServer
43
location = self.get_url()
44
out, err = self.run_bzr('info '+location, retcode=3)
45
self.assertEqual(out, '')
46
self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
48
def test_info_standalone(self):
49
transport = self.get_transport()
51
# Create initial standalone branch
52
tree1 = self.make_branch_and_tree('standalone', 'weave')
53
self.build_tree(['standalone/a'])
55
branch1 = tree1.branch
57
out, err = self.run_bzr('info standalone')
59
"""Standalone tree (format: weave)
61
branch root: standalone
63
self.assertEqual('', err)
65
# Standalone branch - verbose mode
66
out, err = self.run_bzr('info standalone -v')
68
"""Standalone tree (format: weave)
70
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
86
0 versioned subdirectories
94
self.assertEqual('', err)
96
# Standalone branch - really verbose mode
97
out, err = self.run_bzr('info standalone -vv')
99
"""Standalone tree (format: weave)
101
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
117
0 versioned subdirectories
126
self.assertEqual('', err)
127
tree1.commit('commit one')
128
rev = branch1.repository.get_revision(branch1.revision_history()[0])
129
datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
131
# Branch standalone with push location
132
branch2 = branch1.bzrdir.sprout('branch').open_branch()
133
branch2.set_push_location(branch1.bzrdir.root_transport.base)
135
out, err = self.run_bzr('info branch')
136
self.assertEqualDiff(
137
"""Standalone tree (format: weave)
142
push branch: standalone
143
parent branch: standalone
145
self.assertEqual('', err)
147
out, err = self.run_bzr('info branch --verbose')
148
self.assertEqualDiff(
149
"""Standalone tree (format: weave)
154
push branch: standalone
155
parent branch: standalone
158
control: All-in-one format 6
159
working tree: Working tree format 2
160
branch: Branch format 4
161
repository: Weave repository format 6
171
0 versioned subdirectories
181
""" % (datestring_first, datestring_first,
183
self.assertEqual('', err)
185
# Branch and bind to standalone, needs upgrade to metadir
186
# (creates backup as unknown)
187
branch1.bzrdir.sprout('bound')
188
knit1_format = bzrdir.format_registry.make_bzrdir('knit')
189
upgrade.upgrade('bound', knit1_format)
190
branch3 = bzrdir.BzrDir.open('bound').open_branch()
191
branch3.bind(branch1)
192
bound_tree = branch3.bzrdir.open_workingtree()
193
out, err = self.run_bzr('info -v bound')
194
self.assertEqualDiff(
195
"""Checkout (format: knit)
198
checkout of branch: standalone
201
parent branch: standalone
204
control: Meta directory format 1
217
0 versioned subdirectories
227
""" % (bound_tree._format.get_format_description(),
228
branch3._format.get_format_description(),
229
branch3.repository._format.get_format_description(),
230
datestring_first, datestring_first,
232
self.assertEqual('', err)
234
# Checkout standalone (same as above, but does not have parent set)
235
branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
237
branch4.bind(branch1)
238
branch4.bzrdir.open_workingtree().update()
239
out, err = self.run_bzr('info checkout --verbose')
240
self.assertEqualDiff(
241
"""Checkout (format: knit)
243
checkout root: checkout
244
checkout of branch: standalone
247
control: Meta directory format 1
248
working tree: Working tree format 3
249
branch: Branch format 5
260
0 versioned subdirectories
270
""" % (branch4.repository._format.get_format_description(),
271
datestring_first, datestring_first,
273
self.assertEqual('', err)
275
# Lightweight checkout (same as above, different branch and repository)
276
tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
277
branch5 = tree5.branch
278
out, err = self.run_bzr('info -v lightcheckout')
279
self.assertEqualDiff(
280
"""Lightweight checkout (format: %s)
282
light checkout root: lightcheckout
283
checkout of branch: standalone
286
control: Meta directory format 1
287
working tree: Working tree format 6
288
branch: Branch format 4
289
repository: Weave repository format 6
299
0 versioned subdirectories
309
""" % (self._repo_strings, datestring_first, datestring_first,), out)
310
self.assertEqual('', err)
312
# Update initial standalone branch
313
self.build_tree(['standalone/b'])
315
tree1.commit('commit two')
316
rev = branch1.repository.get_revision(branch1.revision_history()[-1])
317
datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
319
# Out of date branched standalone branch will not be detected
320
out, err = self.run_bzr('info -v branch')
321
self.assertEqualDiff(
322
"""Standalone tree (format: weave)
327
push branch: standalone
328
parent branch: standalone
331
control: All-in-one format 6
332
working tree: Working tree format 2
333
branch: Branch format 4
334
repository: Weave repository format 6
344
0 versioned subdirectories
354
""" % (datestring_first, datestring_first,
356
self.assertEqual('', err)
358
# Out of date bound branch
359
out, err = self.run_bzr('info -v bound')
360
self.assertEqualDiff(
361
"""Checkout (format: knit)
364
checkout of branch: standalone
367
parent branch: standalone
370
control: Meta directory format 1
371
working tree: Working tree format 3
372
branch: Branch format 5
375
Branch is out of date: missing 1 revision.
385
0 versioned subdirectories
395
""" % (branch3.repository._format.get_format_description(),
396
datestring_first, datestring_first,
398
self.assertEqual('', err)
400
# Out of date checkout
401
out, err = self.run_bzr('info -v checkout')
402
self.assertEqualDiff(
403
"""Checkout (format: knit)
405
checkout root: checkout
406
checkout of branch: standalone
409
control: Meta directory format 1
410
working tree: Working tree format 3
411
branch: Branch format 5
414
Branch is out of date: missing 1 revision.
424
0 versioned subdirectories
434
""" % (branch4.repository._format.get_format_description(),
435
datestring_first, datestring_first,
437
self.assertEqual('', err)
439
# Out of date lightweight checkout
440
out, err = self.run_bzr('info lightcheckout --verbose')
441
self.assertEqualDiff(
442
"""Lightweight checkout (format: %s)
444
light checkout root: lightcheckout
445
checkout of branch: standalone
448
control: Meta directory format 1
449
working tree: Working tree format 6
450
branch: Branch format 4
451
repository: Weave repository format 6
453
Working tree is out of date: missing 1 revision.
463
0 versioned subdirectories
473
""" % (self._repo_strings, datestring_first, datestring_last,), out)
474
self.assertEqual('', err)
476
def test_info_standalone_no_tree(self):
477
# create standalone branch without a working tree
478
format = bzrdir.format_registry.make_bzrdir('default')
479
branch = self.make_branch('branch')
480
repo = branch.repository
481
out, err = self.run_bzr('info branch -v')
482
self.assertEqualDiff(
483
"""Standalone branch (format: %s)
488
control: Meta directory format 1
497
""" % (info.describe_format(repo.bzrdir, repo, branch, None),
498
format.get_branch_format().get_format_description(),
499
format.repository_format.get_format_description(),
501
self.assertEqual('', err)
503
def test_info_shared_repository(self):
504
format = bzrdir.format_registry.make_bzrdir('knit')
505
transport = self.get_transport()
507
# Create shared repository
508
repo = self.make_repository('repo', shared=True, format=format)
509
repo.set_make_working_trees(False)
510
out, err = self.run_bzr('info -v repo')
511
self.assertEqualDiff(
512
"""Shared repository (format: dirstate or dirstate-tags or knit)
514
shared repository: %s
517
control: Meta directory format 1
522
""" % ('repo', format.repository_format.get_format_description(),
524
self.assertEqual('', err)
526
# Create branch inside shared repository
527
repo.bzrdir.root_transport.mkdir('branch')
528
branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
530
out, err = self.run_bzr('info -v repo/branch')
531
self.assertEqualDiff(
532
"""Repository branch (format: dirstate or knit)
534
shared repository: repo
535
repository branch: repo/branch
538
control: Meta directory format 1
547
""" % (format.get_branch_format().get_format_description(),
548
format.repository_format.get_format_description(),
550
self.assertEqual('', err)
552
# Create lightweight checkout
553
transport.mkdir('tree')
554
transport.mkdir('tree/lightcheckout')
555
tree2 = branch1.create_checkout('tree/lightcheckout',
557
branch2 = tree2.branch
558
self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
559
shared_repo=repo, repo_branch=branch1, verbose=True)
561
# Create normal checkout
562
tree3 = branch1.create_checkout('tree/checkout')
563
self.assertCheckoutStatusOutput('tree/checkout --verbose', tree3,
565
light_checkout=False, repo_branch=branch1)
566
# Update lightweight checkout
567
self.build_tree(['tree/lightcheckout/a'])
569
tree2.commit('commit one')
570
rev = repo.get_revision(branch2.revision_history()[0])
571
datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
572
out, err = self.run_bzr('info tree/lightcheckout --verbose')
573
self.assertEqualDiff(
574
"""Lightweight checkout (format: %s)
576
light checkout root: tree/lightcheckout
577
checkout of branch: repo/branch
578
shared repository: repo
581
control: Meta directory format 1
582
working tree: Working tree format 6
594
0 versioned subdirectories
604
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
605
format.repository_format.get_format_description(),
606
datestring_first, datestring_first,
608
self.assertEqual('', err)
610
# Out of date checkout
611
out, err = self.run_bzr('info -v tree/checkout')
612
self.assertEqualDiff(
613
"""Checkout (format: unnamed)
615
checkout root: tree/checkout
616
checkout of branch: repo/branch
619
control: Meta directory format 1
620
working tree: Working tree format 6
624
Branch is out of date: missing 1 revision.
634
0 versioned subdirectories
641
""" % (format.get_branch_format().get_format_description(),
642
format.repository_format.get_format_description(),
644
self.assertEqual('', err)
648
self.build_tree(['tree/checkout/b'])
650
out, err = self.run_bzr('info tree/checkout --verbose')
651
self.assertEqualDiff(
652
"""Checkout (format: unnamed)
654
checkout root: tree/checkout
655
checkout of branch: repo/branch
658
control: Meta directory format 1
659
working tree: Working tree format 6
671
0 versioned subdirectories
681
""" % (format.get_branch_format().get_format_description(),
682
format.repository_format.get_format_description(),
683
datestring_first, datestring_first,
685
self.assertEqual('', err)
686
tree3.commit('commit two')
688
# Out of date lightweight checkout
689
rev = repo.get_revision(branch1.revision_history()[-1])
690
datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
691
out, err = self.run_bzr('info tree/lightcheckout --verbose')
692
self.assertEqualDiff(
693
"""Lightweight checkout (format: %s)
695
light checkout root: tree/lightcheckout
696
checkout of branch: repo/branch
697
shared repository: repo
700
control: Meta directory format 1
701
working tree: Working tree format 6
705
Working tree is out of date: missing 1 revision.
715
0 versioned subdirectories
725
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
726
format.repository_format.get_format_description(),
727
datestring_first, datestring_last,
729
self.assertEqual('', err)
731
# Show info about shared branch
732
out, err = self.run_bzr('info repo/branch --verbose')
733
self.assertEqualDiff(
734
"""Repository branch (format: dirstate or knit)
736
shared repository: repo
737
repository branch: repo/branch
740
control: Meta directory format 1
752
""" % (format.get_branch_format().get_format_description(),
753
format.repository_format.get_format_description(),
754
datestring_first, datestring_last,
756
self.assertEqual('', err)
758
# Show info about repository with revisions
759
out, err = self.run_bzr('info -v repo')
760
self.assertEqualDiff(
761
"""Shared repository (format: dirstate or dirstate-tags or knit)
763
shared repository: repo
766
control: Meta directory format 1
771
""" % (format.repository_format.get_format_description(),
773
self.assertEqual('', err)
775
def test_info_shared_repository_with_trees(self):
776
format = bzrdir.format_registry.make_bzrdir('knit')
777
transport = self.get_transport()
779
# Create shared repository with working trees
780
repo = self.make_repository('repo', shared=True, format=format)
781
repo.set_make_working_trees(True)
782
out, err = self.run_bzr('info -v repo')
783
self.assertEqualDiff(
784
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
786
shared repository: repo
789
control: Meta directory format 1
792
Create working tree for new branches inside the repository.
796
""" % (format.repository_format.get_format_description(),
798
self.assertEqual('', err)
800
# Create two branches
801
repo.bzrdir.root_transport.mkdir('branch1')
802
branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
804
branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
807
out, err = self.run_bzr('info repo/branch1 --verbose')
808
self.assertEqualDiff(
809
"""Repository tree (format: knit)
811
shared repository: repo
812
repository branch: repo/branch1
815
control: Meta directory format 1
816
working tree: Working tree format 3
828
0 versioned subdirectories
835
""" % (format.get_branch_format().get_format_description(),
836
format.repository_format.get_format_description(),
838
self.assertEqual('', err)
840
# Update first branch
841
self.build_tree(['repo/branch1/a'])
842
tree1 = branch1.bzrdir.open_workingtree()
844
tree1.commit('commit one')
845
rev = repo.get_revision(branch1.revision_history()[0])
846
datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
847
out, err = self.run_bzr('info -v repo/branch1')
848
self.assertEqualDiff(
849
"""Repository tree (format: knit)
851
shared repository: repo
852
repository branch: repo/branch1
855
control: Meta directory format 1
856
working tree: Working tree format 3
868
0 versioned subdirectories
878
""" % (format.get_branch_format().get_format_description(),
879
format.repository_format.get_format_description(),
880
datestring_first, datestring_first,
882
self.assertEqual('', err)
884
# Out of date second branch
885
out, err = self.run_bzr('info repo/branch2 --verbose')
886
self.assertEqualDiff(
887
"""Repository tree (format: knit)
889
shared repository: repo
890
repository branch: repo/branch2
893
parent branch: repo/branch1
896
control: Meta directory format 1
897
working tree: Working tree format 3
909
0 versioned subdirectories
916
""" % (format.get_branch_format().get_format_description(),
917
format.repository_format.get_format_description(),
919
self.assertEqual('', err)
921
# Update second branch
922
tree2 = branch2.bzrdir.open_workingtree()
924
out, err = self.run_bzr('info -v repo/branch2')
925
self.assertEqualDiff(
926
"""Repository tree (format: knit)
928
shared repository: repo
929
repository branch: repo/branch2
932
parent branch: repo/branch1
935
control: Meta directory format 1
936
working tree: Working tree format 3
948
0 versioned subdirectories
958
""" % (format.get_branch_format().get_format_description(),
959
format.repository_format.get_format_description(),
960
datestring_first, datestring_first,
962
self.assertEqual('', err)
964
# Show info about repository with revisions
965
out, err = self.run_bzr('info -v repo')
966
self.assertEqualDiff(
967
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
969
shared repository: repo
972
control: Meta directory format 1
975
Create working tree for new branches inside the repository.
979
""" % (format.repository_format.get_format_description(),
982
self.assertEqual('', err)
984
def test_info_shared_repository_with_tree_in_root(self):
985
format = bzrdir.format_registry.make_bzrdir('knit')
986
transport = self.get_transport()
988
# Create shared repository with working trees
989
repo = self.make_repository('repo', shared=True, format=format)
990
repo.set_make_working_trees(True)
991
out, err = self.run_bzr('info -v repo')
992
self.assertEqualDiff(
993
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
995
shared repository: repo
998
control: Meta directory format 1
1001
Create working tree for new branches inside the repository.
1005
""" % (format.repository_format.get_format_description(),
1007
self.assertEqual('', err)
1009
# Create branch in root of repository
1010
control = repo.bzrdir
1011
branch = control.create_branch()
1012
control.create_workingtree()
1013
out, err = self.run_bzr('info -v repo')
1014
self.assertEqualDiff(
1015
"""Repository tree (format: knit)
1017
shared repository: repo
1018
repository branch: repo
1021
control: Meta directory format 1
1022
working tree: Working tree format 3
1026
In the working tree:
1034
0 versioned subdirectories
1041
""" % (format.get_branch_format().get_format_description(),
1042
format.repository_format.get_format_description(),
1044
self.assertEqual('', err)
1046
def test_info_repository_hook(self):
1047
format = bzrdir.format_registry.make_bzrdir('knit')
1048
def repo_info(repo, stats, outf):
1049
outf.write("more info\n")
1050
info.hooks.install_named_hook('repository', repo_info, None)
1051
# Create shared repository with working trees
1052
repo = self.make_repository('repo', shared=True, format=format)
1053
out, err = self.run_bzr('info -v repo')
1054
self.assertEqualDiff(
1055
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1057
shared repository: repo
1060
control: Meta directory format 1
1063
Create working tree for new branches inside the repository.
1068
""" % (format.repository_format.get_format_description(),
1070
self.assertEqual('', err)
1072
def assertCheckoutStatusOutput(self,
1073
command_string, lco_tree, shared_repo=None,
1076
branch_locked=False, repo_locked=False,
1078
light_checkout=True,
1079
checkout_root=None):
1080
"""Check the output of info in a checkout.
1082
This is not quite a mirror of the info code: rather than using the
1083
tree being examined to predict output, it uses a bunch of flags which
1084
allow us, the test writers, to document what *should* be present in
1085
the output. Removing this separation would remove the value of the
1088
:param path: the path to the light checkout.
1089
:param lco_tree: the tree object for the light checkout.
1090
:param shared_repo: A shared repository is in use, expect that in
1092
:param repo_branch: A branch in a shared repository for non light
1094
:param tree_locked: If true, expect the tree to be locked.
1095
:param branch_locked: If true, expect the branch to be locked.
1096
:param repo_locked: If true, expect the repository to be locked.
1097
Note that the lco_tree.branch.repository is inspected, and if is not
1098
actually locked then this parameter is overridden. This is because
1099
pack repositories do not have any public API for obtaining an
1100
exclusive repository wide lock.
1101
:param verbose: verbosity level: 2 or higher to show committers
1103
def friendly_location(url):
1104
path = urlutils.unescape_for_display(url, 'ascii')
1106
return osutils.relpath(osutils.getcwd(), path)
1107
except errors.PathNotChild:
1111
# We expect this to fail because of locking errors.
1112
# (A write-locked file cannot be read-locked
1113
# in the different process -- either on win32 or on linux).
1114
# This should be removed when the locking errors are fixed.
1115
self.expectFailure('OS locks are exclusive '
1116
'for different processes (Bug #174055)',
1117
self.run_bzr_subprocess,
1118
'info ' + command_string)
1119
out, err = self.run_bzr('info %s' % command_string)
1121
(True, True): 'Lightweight checkout',
1122
(True, False): 'Repository checkout',
1123
(False, True): 'Lightweight checkout',
1124
(False, False): 'Checkout',
1125
}[(shared_repo is not None, light_checkout)]
1126
format = {True: self._repo_strings,
1127
False: 'unnamed'}[light_checkout]
1129
repo_locked = lco_tree.branch.repository.get_physical_lock_status()
1130
if repo_locked or branch_locked or tree_locked:
1131
def locked_message(a_bool):
1136
expected_lock_output = (
1139
" working tree: %s\n"
1141
" repository: %s\n" % (
1142
locked_message(tree_locked),
1143
locked_message(branch_locked),
1144
locked_message(repo_locked)))
1146
expected_lock_output = ''
1150
tree_data = (" light checkout root: %s\n" %
1151
friendly_location(lco_tree.bzrdir.root_transport.base))
1153
if lco_tree.branch.get_bound_location() is not None:
1154
tree_data += ("%s checkout root: %s\n" % (extra_space,
1155
friendly_location(lco_tree.branch.bzrdir.root_transport.base)))
1156
if shared_repo is not None:
1158
" checkout of branch: %s\n"
1159
" shared repository: %s\n" %
1160
(friendly_location(repo_branch.bzrdir.root_transport.base),
1161
friendly_location(shared_repo.bzrdir.root_transport.base)))
1162
elif repo_branch is not None:
1164
"%s checkout of branch: %s\n" %
1166
friendly_location(repo_branch.bzrdir.root_transport.base)))
1168
branch_data = (" checkout of branch: %s\n" %
1169
lco_tree.branch.bzrdir.root_transport.base)
1172
verbose_info = ' 0 committers\n'
1176
self.assertEqualDiff(
1181
control: Meta directory format 1
1186
In the working tree:
1194
0 versioned subdirectories
1205
lco_tree._format.get_format_description(),
1206
lco_tree.branch._format.get_format_description(),
1207
lco_tree.branch.repository._format.get_format_description(),
1208
expected_lock_output,
1211
self.assertEqual('', err)
1213
def test_info_locking(self):
1214
transport = self.get_transport()
1215
# Create shared repository with a branch
1216
repo = self.make_repository('repo', shared=True,
1217
format=bzrdir.BzrDirMetaFormat1())
1218
repo.set_make_working_trees(False)
1219
repo.bzrdir.root_transport.mkdir('branch')
1220
repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
1221
format=bzrdir.BzrDirMetaFormat1())
1222
# Do a heavy checkout
1223
transport.mkdir('tree')
1224
transport.mkdir('tree/checkout')
1225
co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1226
format=bzrdir.BzrDirMetaFormat1())
1227
co_branch.bind(repo_branch)
1228
# Do a light checkout of the heavy one
1229
transport.mkdir('tree/lightcheckout')
1230
lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1231
branch.BranchReferenceFormat().initialize(lco_dir,
1232
target_branch=co_branch)
1233
lco_dir.create_workingtree()
1234
lco_tree = lco_dir.open_workingtree()
1236
# Test all permutations of locking the working tree, branch and repository
1240
self.assertCheckoutStatusOutput('-v tree/lightcheckout', lco_tree,
1241
repo_branch=repo_branch,
1242
verbose=True, light_checkout=True)
1244
lco_tree.branch.repository.lock_write()
1246
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1247
lco_tree, repo_branch=repo_branch,
1248
repo_locked=True, verbose=True, light_checkout=True)
1250
lco_tree.branch.repository.unlock()
1252
lco_tree.branch.lock_write()
1254
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1258
repo_branch=repo_branch,
1261
lco_tree.branch.unlock()
1263
lco_tree.lock_write()
1265
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1266
lco_tree, repo_branch=repo_branch,
1274
lco_tree.lock_write()
1275
lco_tree.branch.repository.unlock()
1277
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1278
lco_tree, repo_branch=repo_branch,
1283
lco_tree.branch.repository.lock_write()
1286
lco_tree.lock_write()
1287
lco_tree.branch.unlock()
1289
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1290
lco_tree, repo_branch=repo_branch,
1294
lco_tree.branch.lock_write()
1297
lco_tree.lock_write()
1298
lco_tree.branch.unlock()
1299
lco_tree.branch.repository.lock_write()
1301
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1302
lco_tree, repo_branch=repo_branch,
1307
lco_tree.branch.repository.unlock()
1308
lco_tree.branch.lock_write()
1311
lco_tree.branch.lock_write()
1312
lco_tree.branch.repository.unlock()
1314
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1315
lco_tree, repo_branch=repo_branch,
1319
lco_tree.branch.repository.lock_write()
1320
lco_tree.branch.unlock()
1322
if sys.platform == 'win32':
1323
self.knownFailure('Win32 cannot run "bzr info"'
1324
' 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
def test_info_stacked(self):
1410
# We have a mainline
1411
trunk_tree = self.make_branch_and_tree('mainline',
1413
trunk_tree.commit('mainline')
1414
# and a branch from it which is stacked
1415
new_dir = trunk_tree.bzrdir.sprout('newbranch', stacked=True)
1416
out, err = self.run_bzr('info newbranch')
1418
"""Standalone tree (format: 1.6)
1420
branch root: newbranch
1423
parent branch: mainline
1424
stacked on: mainline
1426
self.assertEqual("", err)