36
41
location = "C:/i/do/not/exist/"
38
43
location = "/i/do/not/exist/"
39
out, err = self.runbzr('info '+location, retcode=3)
44
out, err = self.run_bzr('info '+location, retcode=3)
40
45
self.assertEqual(out, '')
41
self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
46
self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
43
48
def test_info_standalone(self):
44
49
transport = self.get_transport()
48
53
self.build_tree(['standalone/a'])
50
55
branch1 = tree1.branch
51
out, err = self.runbzr('info standalone -v')
53
"""Standalone tree (format: weave)
57
out, err = self.run_bzr('info standalone')
59
"""Standalone tree (format: weave)
61
branch root: standalone
63
self.assertEqual('', err)
65
out, err = self.run_bzr('info standalone -v')
67
"""Standalone tree (format: weave)
69
branch root: standalone
58
72
control: All-in-one format 6
86
100
# Branch standalone with push location
87
101
branch2 = branch1.bzrdir.sprout('branch').open_branch()
88
102
branch2.set_push_location(branch1.bzrdir.root_transport.base)
89
out, err = self.runbzr('info branch --verbose')
91
"""Standalone tree (format: weave)
104
out, err = self.run_bzr('info branch')
105
self.assertEqualDiff(
106
"""Standalone tree (format: weave)
111
push branch: standalone
112
parent branch: standalone
114
self.assertEqual('', err)
116
out, err = self.run_bzr('info branch --verbose')
117
self.assertEqualDiff(
118
"""Standalone tree (format: weave)
123
push branch: standalone
124
parent branch: standalone
100
127
control: All-in-one format 6
125
""" % (branch2.bzrdir.root_transport.base,
126
branch1.bzrdir.root_transport.base,
127
branch1.bzrdir.root_transport.base,
128
datestring_first, datestring_first,
152
""" % (datestring_first, datestring_first,
129
153
# poking at _revision_store isn't all that clean, but neither is
130
154
# having the ui test dependent on the exact overhead of a given store.
131
155
branch2.repository._revision_store.total_size(
141
165
branch3 = bzrlib.bzrdir.BzrDir.open('bound').open_branch()
142
166
branch3.bind(branch1)
143
167
bound_tree = branch3.bzrdir.open_workingtree()
144
out, err = self.runbzr('info -v bound')
168
out, err = self.run_bzr('info -v bound')
145
169
self.assertEqualDiff(
146
170
"""Checkout (format: knit)
149
checkout of branch: %s
173
checkout of branch: standalone
151
175
Related branches:
176
parent branch: standalone
155
179
control: Meta directory format 1
180
""" % (branch3.bzrdir.root_transport.base,
181
branch1.bzrdir.root_transport.base,
182
branch1.bzrdir.root_transport.base,
183
bound_tree._format.get_format_description(),
204
""" % (bound_tree._format.get_format_description(),
184
205
branch3._format.get_format_description(),
185
206
branch3.repository._format.get_format_description(),
186
207
datestring_first, datestring_first,
196
217
format=knit1_format)
197
218
branch4.bind(branch1)
198
219
branch4.bzrdir.open_workingtree().update()
199
out, err = self.runbzr('info checkout --verbose')
220
out, err = self.run_bzr('info checkout --verbose')
200
221
self.assertEqualDiff(
201
222
"""Checkout (format: knit)
204
checkout of branch: %s
224
checkout root: checkout
225
checkout of branch: standalone
207
228
control: Meta directory format 1
232
""" % (branch4.bzrdir.root_transport.base,
233
branch1.bzrdir.root_transport.base,
234
branch4.repository._format.get_format_description(),
253
""" % (branch4.repository._format.get_format_description(),
235
254
datestring_first, datestring_first,
236
255
# poking at _revision_store isn't all that clean, but neither is
237
256
# having the ui test dependent on the exact overhead of a given store.
243
262
# Lightweight checkout (same as above, different branch and repository)
244
263
tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
245
264
branch5 = tree5.branch
246
out, err = self.runbzr('info -v lightcheckout')
265
out, err = self.run_bzr('info -v lightcheckout')
247
266
self.assertEqualDiff(
248
"""Lightweight checkout (format: dirstate or dirstate-tags)
267
"""Lightweight checkout (format: dirstate or dirstate-tags or \
268
pack-0.92 or rich-root or rich-root-pack)
250
light checkout root: %s
251
checkout of branch: %s
270
light checkout root: lightcheckout
271
checkout of branch: standalone
254
274
control: Meta directory format 1
279
""" % (tree5.bzrdir.root_transport.base,
280
branch1.bzrdir.root_transport.base,
281
datestring_first, datestring_first,
299
""" % (datestring_first, datestring_first,), out)
283
300
self.assertEqual('', err)
285
302
# Update initial standalone branch
290
307
datestring_last = format_date(rev.timestamp, rev.timezone)
292
309
# Out of date branched standalone branch will not be detected
293
out, err = self.runbzr('info -v branch')
310
out, err = self.run_bzr('info -v branch')
294
311
self.assertEqualDiff(
295
312
"""Standalone tree (format: weave)
299
316
Related branches:
301
publish to branch: %s
317
push branch: standalone
318
parent branch: standalone
304
321
control: All-in-one format 6
329
""" % (branch2.bzrdir.root_transport.base,
330
branch1.bzrdir.root_transport.base,
331
branch1.bzrdir.root_transport.base,
332
datestring_first, datestring_first,
346
""" % (datestring_first, datestring_first,
334
348
self.assertEqual('', err)
336
350
# Out of date bound branch
337
out, err = self.runbzr('info -v bound')
351
out, err = self.run_bzr('info -v bound')
338
352
self.assertEqualDiff(
339
353
"""Checkout (format: knit)
342
checkout of branch: %s
356
checkout of branch: standalone
344
358
Related branches:
359
parent branch: standalone
348
362
control: Meta directory format 1
375
""" % (branch3.bzrdir.root_transport.base,
376
branch1.bzrdir.root_transport.base,
377
branch1.bzrdir.root_transport.base,
378
branch3.repository._format.get_format_description(),
389
""" % (branch3.repository._format.get_format_description(),
379
390
datestring_first, datestring_first,
380
391
# poking at _revision_store isn't all that clean, but neither is
381
392
# having the ui test dependent on the exact overhead of a given store.
385
396
self.assertEqual('', err)
387
398
# Out of date checkout
388
out, err = self.runbzr('info -v checkout')
399
out, err = self.run_bzr('info -v checkout')
389
400
self.assertEqualDiff(
390
401
"""Checkout (format: knit)
393
checkout of branch: %s
403
checkout root: checkout
404
checkout of branch: standalone
396
407
control: Meta directory format 1
423
""" % (branch4.bzrdir.root_transport.base,
424
branch1.bzrdir.root_transport.base,
425
branch4.repository._format.get_format_description(),
434
""" % (branch4.repository._format.get_format_description(),
426
435
datestring_first, datestring_first,
427
436
# poking at _revision_store isn't all that clean, but neither is
428
437
# having the ui test dependent on the exact overhead of a given store.
432
441
self.assertEqual('', err)
434
443
# Out of date lightweight checkout
435
out, err = self.runbzr('info lightcheckout --verbose')
444
out, err = self.run_bzr('info lightcheckout --verbose')
436
445
self.assertEqualDiff(
437
"""Lightweight checkout (format: dirstate or dirstate-tags)
446
"""Lightweight checkout (format: dirstate or dirstate-tags or \
447
pack-0.92 or rich-root or rich-root-pack)
439
light checkout root: %s
440
checkout of branch: %s
449
light checkout root: lightcheckout
450
checkout of branch: standalone
443
453
control: Meta directory format 1
470
""" % (tree5.bzrdir.root_transport.base,
471
branch1.bzrdir.root_transport.base,
472
datestring_first, datestring_last,
480
""" % (datestring_first, datestring_last,), out)
474
481
self.assertEqual('', err)
476
483
def test_info_standalone_no_tree(self):
478
485
format = bzrdir.format_registry.make_bzrdir('default')
479
486
branch = self.make_branch('branch')
480
487
repo = branch.repository
481
out, err = self.runbzr('info branch -v')
488
out, err = self.run_bzr('info branch -v')
482
489
self.assertEqualDiff(
483
"""Standalone branch (format: dirstate or knit)
490
"""Standalone branch (format: %s)
488
495
control: Meta directory format 1
499
""" % (branch.bzrdir.root_transport.base,
506
""" % (info.describe_format(repo.bzrdir, repo, branch, None),
500
507
format.get_branch_format().get_format_description(),
501
508
format.repository_format.get_format_description(),
509
516
# Create shared repository
510
517
repo = self.make_repository('repo', shared=True, format=format)
511
518
repo.set_make_working_trees(False)
512
out, err = self.runbzr('info -v repo')
519
out, err = self.run_bzr('info -v repo')
513
520
self.assertEqualDiff(
514
521
"""Shared repository (format: dirstate or dirstate-tags or knit)
531
537
repo.bzrdir.root_transport.mkdir('branch')
532
538
branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
534
out, err = self.runbzr('info -v repo/branch')
540
out, err = self.run_bzr('info -v repo/branch')
535
541
self.assertEqualDiff(
536
542
"""Repository branch (format: dirstate or knit)
538
shared repository: %s
539
repository branch: branch
544
shared repository: repo
545
repository branch: repo/branch
542
548
control: Meta directory format 1
553
""" % (repo.bzrdir.root_transport.base,
554
format.get_branch_format().get_format_description(),
559
""" % (format.get_branch_format().get_format_description(),
555
560
format.repository_format.get_format_description(),
557
562
self.assertEqual('', err)
576
581
tree2.commit('commit one')
577
582
rev = repo.get_revision(branch2.revision_history()[0])
578
583
datestring_first = format_date(rev.timestamp, rev.timezone)
579
out, err = self.runbzr('info tree/lightcheckout --verbose')
584
out, err = self.run_bzr('info tree/lightcheckout --verbose')
580
585
self.assertEqualDiff(
581
"""Lightweight checkout (format: dirstate or dirstate-tags)
586
"""Lightweight checkout (format: dirstate or dirstate-tags or \
587
pack-0.92 or rich-root or rich-root-pack)
583
light checkout root: %s
584
checkout of branch: %s
585
shared repository: %s
589
light checkout root: tree/lightcheckout
590
checkout of branch: repo/branch
591
shared repository: repo
588
594
control: Meta directory format 1
613
""" % (tree2.bzrdir.root_transport.base,
614
tree2.branch.bzrdir.root_transport.base,
615
repo.bzrdir.root_transport.base,
616
format.get_branch_format().get_format_description(),
619
""" % (format.get_branch_format().get_format_description(),
617
620
format.repository_format.get_format_description(),
618
621
datestring_first, datestring_first,
619
622
# poking at _revision_store isn't all that clean, but neither is
623
626
self.assertEqual('', err)
625
628
# Out of date checkout
626
out, err = self.runbzr('info -v tree/checkout')
629
out, err = self.run_bzr('info -v tree/checkout')
627
630
self.assertEqualDiff(
628
631
"""Checkout (format: dirstate)
631
checkout of branch: %s
633
checkout root: tree/checkout
634
checkout of branch: repo/branch
634
637
control: Meta directory format 1
658
""" % (tree3.bzrdir.root_transport.base,
659
branch1.bzrdir.root_transport.base,
660
format.get_branch_format().get_format_description(),
661
""" % (format.get_branch_format().get_format_description(),
661
662
format.repository_format.get_format_description(),
663
664
self.assertEqual('', err)
667
668
self.build_tree(['tree/checkout/b'])
669
out, err = self.runbzr('info tree/checkout --verbose')
670
out, err = self.run_bzr('info tree/checkout --verbose')
670
671
self.assertEqualDiff(
671
672
"""Checkout (format: dirstate)
674
checkout of branch: %s
674
checkout root: tree/checkout
675
checkout of branch: repo/branch
677
678
control: Meta directory format 1
702
""" % (tree3.bzrdir.root_transport.base, branch1.bzrdir.root_transport.base,
703
format.get_branch_format().get_format_description(),
703
""" % (format.get_branch_format().get_format_description(),
704
704
format.repository_format.get_format_description(),
705
705
datestring_first, datestring_first,
706
706
# poking at _revision_store isn't all that clean, but neither is
713
713
# Out of date lightweight checkout
714
714
rev = repo.get_revision(branch1.revision_history()[-1])
715
715
datestring_last = format_date(rev.timestamp, rev.timezone)
716
out, err = self.runbzr('info tree/lightcheckout --verbose')
716
out, err = self.run_bzr('info tree/lightcheckout --verbose')
717
717
self.assertEqualDiff(
718
"""Lightweight checkout (format: dirstate or dirstate-tags)
718
"""Lightweight checkout (format: dirstate or dirstate-tags or \
719
pack-0.92 or rich-root or rich-root-pack)
720
light checkout root: %s
721
checkout of branch: %s
722
shared repository: %s
721
light checkout root: tree/lightcheckout
722
checkout of branch: repo/branch
723
shared repository: repo
725
726
control: Meta directory format 1
752
""" % (tree2.bzrdir.root_transport.base,
753
tree2.branch.bzrdir.root_transport.base,
754
repo.bzrdir.root_transport.base,
755
format.get_branch_format().get_format_description(),
753
""" % (format.get_branch_format().get_format_description(),
756
754
format.repository_format.get_format_description(),
757
755
datestring_first, datestring_last,
758
756
# poking at _revision_store isn't all that clean, but neither is
762
760
self.assertEqual('', err)
764
762
# Show info about shared branch
765
out, err = self.runbzr('info repo/branch --verbose')
763
out, err = self.run_bzr('info repo/branch --verbose')
766
764
self.assertEqualDiff(
767
765
"""Repository branch (format: dirstate or knit)
769
shared repository: %s
770
repository branch: branch
767
shared repository: repo
768
repository branch: repo/branch
773
771
control: Meta directory format 1
787
""" % (repo.bzrdir.root_transport.base,
788
format.get_branch_format().get_format_description(),
785
""" % (format.get_branch_format().get_format_description(),
789
786
format.repository_format.get_format_description(),
790
787
datestring_first, datestring_last,
791
788
# poking at _revision_store isn't all that clean, but neither is
795
792
self.assertEqual('', err)
797
794
# Show info about repository with revisions
798
out, err = self.runbzr('info -v repo')
795
out, err = self.run_bzr('info -v repo')
799
796
self.assertEqualDiff(
800
797
"""Shared repository (format: dirstate or dirstate-tags or knit)
802
shared repository: %s
799
shared repository: repo
805
802
control: Meta directory format 1
811
""" % (repo.bzrdir.root_transport.base,
812
format.repository_format.get_format_description(),
808
""" % (format.repository_format.get_format_description(),
813
809
# poking at _revision_store isn't all that clean, but neither is
814
810
# having the ui test dependent on the exact overhead of a given store.
815
811
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
823
819
# Create shared repository with working trees
824
820
repo = self.make_repository('repo', shared=True, format=format)
825
821
repo.set_make_working_trees(True)
826
out, err = self.runbzr('info -v repo')
822
out, err = self.run_bzr('info -v repo')
827
823
self.assertEqualDiff(
828
824
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
830
shared repository: %s
826
shared repository: repo
833
829
control: Meta directory format 1
850
845
branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
852
847
# Empty first branch
853
out, err = self.runbzr('info repo/branch1 --verbose')
848
out, err = self.run_bzr('info repo/branch1 --verbose')
854
849
self.assertEqualDiff(
855
850
"""Repository tree (format: knit)
857
shared repository: %s
858
repository branch: branch1
852
shared repository: repo
853
repository branch: repo/branch1
861
856
control: Meta directory format 1
883
""" % (repo.bzrdir.root_transport.base,
884
format.get_branch_format().get_format_description(),
878
""" % (format.get_branch_format().get_format_description(),
885
879
format.repository_format.get_format_description(),
887
881
self.assertEqual('', err)
893
887
tree1.commit('commit one')
894
888
rev = repo.get_revision(branch1.revision_history()[0])
895
889
datestring_first = format_date(rev.timestamp, rev.timezone)
896
out, err = self.runbzr('info -v repo/branch1')
890
out, err = self.run_bzr('info -v repo/branch1')
897
891
self.assertEqualDiff(
898
892
"""Repository tree (format: knit)
900
shared repository: %s
901
repository branch: branch1
894
shared repository: repo
895
repository branch: repo/branch1
904
898
control: Meta directory format 1
929
""" % (repo.bzrdir.root_transport.base,
930
format.get_branch_format().get_format_description(),
923
""" % (format.get_branch_format().get_format_description(),
931
924
format.repository_format.get_format_description(),
932
925
datestring_first, datestring_first,
933
926
# poking at _revision_store isn't all that clean, but neither is
937
930
self.assertEqual('', err)
939
932
# Out of date second branch
940
out, err = self.runbzr('info repo/branch2 --verbose')
933
out, err = self.run_bzr('info repo/branch2 --verbose')
941
934
self.assertEqualDiff(
942
935
"""Repository tree (format: knit)
944
shared repository: %s
945
repository branch: branch2
937
shared repository: repo
938
repository branch: repo/branch2
947
940
Related branches:
941
parent branch: repo/branch1
951
944
control: Meta directory format 1
973
""" % (repo.bzrdir.root_transport.base,
974
branch1.bzrdir.root_transport.base,
975
format.get_branch_format().get_format_description(),
966
""" % (format.get_branch_format().get_format_description(),
976
967
format.repository_format.get_format_description(),
977
968
# poking at _revision_store isn't all that clean, but neither is
978
969
# having the ui test dependent on the exact overhead of a given store.
983
974
# Update second branch
984
975
tree2 = branch2.bzrdir.open_workingtree()
985
976
tree2.pull(branch1)
986
out, err = self.runbzr('info -v repo/branch2')
977
out, err = self.run_bzr('info -v repo/branch2')
987
978
self.assertEqualDiff(
988
979
"""Repository tree (format: knit)
990
shared repository: %s
991
repository branch: branch2
981
shared repository: repo
982
repository branch: repo/branch2
993
984
Related branches:
985
parent branch: repo/branch1
997
988
control: Meta directory format 1
1022
""" % (repo.bzrdir.root_transport.base,
1023
branch1.bzrdir.root_transport.base,
1024
format.get_branch_format().get_format_description(),
1013
""" % (format.get_branch_format().get_format_description(),
1025
1014
format.repository_format.get_format_description(),
1026
1015
datestring_first, datestring_first,
1027
1016
# poking at _revision_store isn't all that clean, but neither is
1031
1020
self.assertEqual('', err)
1033
1022
# Show info about repository with revisions
1034
out, err = self.runbzr('info -v repo')
1023
out, err = self.run_bzr('info -v repo')
1035
1024
self.assertEqualDiff(
1036
1025
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1038
shared repository: %s
1027
shared repository: repo
1041
1030
control: Meta directory format 1
1049
""" % (repo.bzrdir.root_transport.base,
1050
format.repository_format.get_format_description(),
1038
""" % (format.repository_format.get_format_description(),
1051
1039
# poking at _revision_store isn't all that clean, but neither is
1052
1040
# having the ui test dependent on the exact overhead of a given store.
1053
1041
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
1062
1050
# Create shared repository with working trees
1063
1051
repo = self.make_repository('repo', shared=True, format=format)
1064
1052
repo.set_make_working_trees(True)
1065
out, err = self.runbzr('info -v repo')
1053
out, err = self.run_bzr('info -v repo')
1066
1054
self.assertEqualDiff(
1067
1055
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1069
shared repository: %s
1057
shared repository: repo
1072
1060
control: Meta directory format 1
1086
1073
control = repo.bzrdir
1087
1074
branch = control.create_branch()
1088
1075
control.create_workingtree()
1089
out, err = self.runbzr('info -v repo')
1076
out, err = self.run_bzr('info -v repo')
1090
1077
self.assertEqualDiff(
1091
1078
"""Repository tree (format: knit)
1093
shared repository: %s
1094
repository branch: .
1080
shared repository: repo
1081
repository branch: repo
1097
1084
control: Meta directory format 1
1119
""" % (repo.bzrdir.root_transport.base,
1120
format.get_branch_format().get_format_description(),
1106
""" % (format.get_branch_format().get_format_description(),
1121
1107
format.repository_format.get_format_description(),
1123
1109
self.assertEqual('', err)
1125
def assertCheckoutStatusOutput(self,
1111
def assertCheckoutStatusOutput(self,
1126
1112
command_string, lco_tree, shared_repo=None,
1127
1113
repo_branch=None,
1128
1114
tree_locked=False,
1147
1133
:param tree_locked: If true, expect the tree to be locked.
1148
1134
:param branch_locked: If true, expect the branch to be locked.
1149
1135
:param repo_locked: If true, expect the repository to be locked.
1136
Note that the lco_tree.branch.repository is inspected, and if is not
1137
actually locked then this parameter is overridden. This is because
1138
pack repositories do not have any public API for obtaining an
1139
exclusive repository wide lock.
1150
1140
:param verbose: If true, expect verbose output
1152
if tree_locked and sys.platform == 'win32':
1153
# We expect this to fail because of locking errors. (A write-locked
1154
# file cannot be read-locked in the same process).
1142
def friendly_location(url):
1143
path = urlutils.unescape_for_display(url, 'ascii')
1145
return osutils.relpath(osutils.getcwd(), path)
1146
except errors.PathNotChild:
1150
# We expect this to fail because of locking errors.
1151
# (A write-locked file cannot be read-locked
1152
# in the different process -- either on win32 or on linux).
1155
1153
# This should be removed when the locking errors are fixed.
1156
args = command_string.split(' ')
1157
self.run_bzr_error([], 'info', *args)
1159
out, err = self.runbzr('info %s' % command_string)
1154
self.expectFailure('OS locks are exclusive '
1155
'for different processes (Bug #174055)',
1156
self.run_bzr_subprocess,
1157
'info ' + command_string)
1158
out, err = self.run_bzr('info %s' % command_string)
1160
1159
description = {
1161
1160
(True, True): 'Lightweight checkout',
1162
1161
(True, False): 'Repository checkout',
1163
1162
(False, True): 'Lightweight checkout',
1164
1163
(False, False): 'Checkout',
1165
1164
}[(shared_repo is not None, light_checkout)]
1166
format = {True: 'dirstate or dirstate-tags',
1165
format = {True: 'dirstate or dirstate-tags or pack-0.92'
1166
' or rich-root or rich-root-pack',
1167
1167
False: 'dirstate'}[light_checkout]
1169
repo_locked = lco_tree.branch.repository.get_physical_lock_status()
1168
1170
if repo_locked or branch_locked or tree_locked:
1169
1171
def locked_message(a_bool):
1186
1188
extra_space = ''
1187
1189
if light_checkout:
1188
1190
tree_data = (" light checkout root: %s\n" %
1189
lco_tree.bzrdir.root_transport.base)
1191
friendly_location(lco_tree.bzrdir.root_transport.base))
1190
1192
extra_space = ' '
1191
1193
if lco_tree.branch.get_bound_location() is not None:
1192
1194
tree_data += ("%s checkout root: %s\n" % (extra_space,
1193
lco_tree.branch.bzrdir.root_transport.base))
1195
friendly_location(lco_tree.branch.bzrdir.root_transport.base)))
1194
1196
if shared_repo is not None:
1195
1197
branch_data = (
1196
1198
" checkout of branch: %s\n"
1197
1199
" shared repository: %s\n" %
1198
(repo_branch.bzrdir.root_transport.base,
1199
shared_repo.bzrdir.root_transport.base))
1200
(friendly_location(repo_branch.bzrdir.root_transport.base),
1201
friendly_location(shared_repo.bzrdir.root_transport.base)))
1200
1202
elif repo_branch is not None:
1201
1203
branch_data = (
1202
1204
"%s checkout of branch: %s\n" %
1204
repo_branch.bzrdir.root_transport.base))
1206
friendly_location(repo_branch.bzrdir.root_transport.base)))
1206
1208
branch_data = (" checkout of branch: %s\n" %
1207
1209
lco_tree.branch.bzrdir.root_transport.base)
1407
""" % (tree.bzrdir.root_transport.base,
1408
tree.branch.repository._format.get_format_description(),
1409
""" % ('branch', tree.branch.repository._format.get_format_description(),
1410
1411
self.assertEqual('', err)
1412
1413
tree.lock_write()
1413
out, err = self.runbzr('info -v branch')
1414
out, err = self.run_bzr('info -v branch')
1414
1415
self.assertEqualDiff(
1415
1416
"""Standalone tree (format: weave)