13
14
# You should have received a copy of the GNU General Public License
14
15
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
19
"""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"
24
from bzrlib import repository
25
from bzrlib.osutils import format_date
26
from bzrlib.tests import TestSkipped
27
from bzrlib.tests.blackbox import ExternalBase
30
class TestInfo(ExternalBase):
41
32
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)
33
if sys.platform == "win32":
34
location = "C:/i/do/not/exist/"
36
location = "/i/do/not/exist/"
37
out, err = self.runbzr('info '+location, retcode=3)
45
38
self.assertEqual(out, '')
46
self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
39
self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
48
41
def test_info_standalone(self):
49
42
transport = self.get_transport()
51
44
# Create initial standalone branch
52
tree1 = self.make_branch_and_tree('standalone', 'knit')
45
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
46
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirFormat6())
47
tree1 = self.make_branch_and_tree('standalone')
48
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
53
49
self.build_tree(['standalone/a'])
55
51
branch1 = tree1.branch
57
out, err = self.run_bzr('info standalone')
59
"""Standalone tree (format: knit)
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: knit)
70
branch root: standalone
73
control: Meta directory format 1
74
working tree: Working tree format 3
75
branch: Branch format 5
76
repository: Knit repository format 1
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: knit)
101
branch root: standalone
104
control: Meta directory format 1
105
working tree: Working tree format 3
106
branch: Branch format 5
107
repository: Knit repository format 1
117
0 versioned subdirectories
52
out, err = self.runbzr('info standalone')
58
control: All-in-one format 6
59
working tree: Working tree format 2
60
branch: Branch format 4
61
repository: Weave repository format 6
71
0 versioned subdirectories
79
""" % branch1.bzrdir.root_transport.base, out)
126
80
self.assertEqual('', err)
127
81
tree1.commit('commit one')
128
82
rev = branch1.repository.get_revision(branch1.revision_history()[0])
129
datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
83
datestring_first = format_date(rev.timestamp, rev.timezone)
131
85
# Branch standalone with push location
132
86
branch2 = branch1.bzrdir.sprout('branch').open_branch()
133
87
branch2.set_push_location(branch1.bzrdir.root_transport.base)
135
out, err = self.run_bzr('info branch')
136
self.assertEqualDiff(
137
"""Standalone tree (format: knit)
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: knit)
154
push branch: standalone
155
parent branch: standalone
88
out, err = self.runbzr('info branch --verbose')
158
control: Meta directory format 1
159
working tree: Working tree format 3
160
branch: Branch format 5
161
repository: Knit repository format 1
98
control: All-in-one format 6
99
working tree: Working tree format 2
100
branch: Branch format 4
101
repository: Weave repository format 6
163
103
In the working tree:
176
117
first revision: %s
177
118
latest revision: %s
181
""" % (datestring_first, datestring_first,
123
""" % (branch2.bzrdir.root_transport.base,
124
branch1.bzrdir.root_transport.base,
125
branch1.bzrdir.root_transport.base,
126
datestring_first, datestring_first,
127
# poking at _revision_store isn't all that clean, but neither is
128
# having the ui test dependent on the exact overhead of a given store.
129
branch2.repository._revision_store.total_size(
130
branch2.repository.get_transaction())[1] / 1024,
183
132
self.assertEqual('', err)
185
134
# Branch and bind to standalone, needs upgrade to metadir
186
135
# (creates backup as unknown)
187
136
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()
137
knit1_format = bzrlib.bzrdir.BzrDirMetaFormat1()
138
knit1_format.repository_format = repository.RepositoryFormatKnit1()
139
bzrlib.upgrade.upgrade('bound', knit1_format)
140
branch3 = bzrlib.bzrdir.BzrDir.open('bound').open_branch()
191
141
branch3.bind(branch1)
192
142
bound_tree = branch3.bzrdir.open_workingtree()
193
out, err = self.run_bzr('info -v bound')
143
out, err = self.runbzr('info bound')
194
144
self.assertEqualDiff(
195
"""Checkout (format: knit)
198
checkout of branch: standalone
147
checkout of branch: %s
200
149
Related branches:
201
parent branch: standalone
204
153
control: Meta directory format 1
155
branch: Branch format 5
209
158
In the working tree:
222
171
first revision: %s
223
172
latest revision: %s
227
""" % (bound_tree._format.get_format_description(),
228
branch3._format.get_format_description(),
177
""" % (branch3.bzrdir.root_transport.base,
178
branch1.bzrdir.root_transport.base,
179
branch1.bzrdir.root_transport.base,
180
bound_tree._format.get_format_description(),
229
181
branch3.repository._format.get_format_description(),
230
182
datestring_first, datestring_first,
183
# poking at _revision_store isn't all that clean, but neither is
184
# having the ui test dependent on the exact overhead of a given store.
185
branch3.repository._revision_store.total_size(
186
branch3.repository.get_transaction())[1] / 1024,
232
188
self.assertEqual('', err)
234
190
# Checkout standalone (same as above, but does not have parent set)
235
branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
191
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
192
bzrlib.bzrdir.BzrDirFormat.set_default_format(knit1_format)
193
branch4 = bzrlib.bzrdir.BzrDir.create_branch_convenience('checkout')
194
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
237
195
branch4.bind(branch1)
238
196
branch4.bzrdir.open_workingtree().update()
239
out, err = self.run_bzr('info checkout --verbose')
197
out, err = self.runbzr('info checkout --verbose')
240
198
self.assertEqualDiff(
241
"""Checkout (format: knit)
243
checkout root: checkout
244
checkout of branch: standalone
201
checkout of branch: %s
247
204
control: Meta directory format 1
265
223
first revision: %s
266
224
latest revision: %s
270
""" % (branch4.repository._format.get_format_description(),
229
""" % (branch4.bzrdir.root_transport.base,
230
branch1.bzrdir.root_transport.base,
231
branch4.repository._format.get_format_description(),
271
232
datestring_first, datestring_first,
233
# poking at _revision_store isn't all that clean, but neither is
234
# having the ui test dependent on the exact overhead of a given store.
235
branch4.repository._revision_store.total_size(
236
branch4.repository.get_transaction())[1] / 1024,
273
238
self.assertEqual('', err)
275
240
# Lightweight checkout (same as above, different branch and repository)
276
tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
241
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
242
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
243
transport.mkdir('lightcheckout')
244
dir5 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('lightcheckout')
245
bzrlib.branch.BranchReferenceFormat().initialize(dir5, branch1)
246
dir5.create_workingtree()
247
tree5 = dir5.open_workingtree()
248
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
277
249
branch5 = tree5.branch
278
out, err = self.run_bzr('info -v lightcheckout')
279
if "metaweave" in bzrdir.format_registry:
280
format_description = "knit or metaweave"
282
format_description = "knit"
250
out, err = self.runbzr('info lightcheckout')
283
251
self.assertEqualDiff(
284
"""Lightweight checkout (format: %s)
286
light checkout root: lightcheckout
287
checkout of branch: standalone
253
light checkout root: %s
254
checkout of branch: %s
290
257
control: Meta directory format 1
291
258
working tree: Working tree format 3
292
branch: Branch format 5
293
repository: Knit repository format 1
259
branch: Branch format 4
260
repository: Weave repository format 6
295
262
In the working tree:
319
290
tree1.commit('commit two')
320
291
rev = branch1.repository.get_revision(branch1.revision_history()[-1])
321
datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
292
datestring_last = format_date(rev.timestamp, rev.timezone)
323
294
# Out of date branched standalone branch will not be detected
324
out, err = self.run_bzr('info -v branch')
295
out, err = self.runbzr('info branch')
325
296
self.assertEqualDiff(
326
"""Standalone tree (format: knit)
330
300
Related branches:
331
push branch: standalone
332
parent branch: standalone
302
publish to branch: %s
335
control: Meta directory format 1
336
working tree: Working tree format 3
337
branch: Branch format 5
338
repository: Knit repository format 1
305
control: All-in-one format 6
306
working tree: Working tree format 2
307
branch: Branch format 4
308
repository: Weave repository format 6
340
310
In the working tree:
353
323
first revision: %s
354
324
latest revision: %s
358
""" % (datestring_first, datestring_first,
329
""" % (branch2.bzrdir.root_transport.base,
330
branch1.bzrdir.root_transport.base,
331
branch1.bzrdir.root_transport.base,
332
datestring_first, datestring_first,
360
334
self.assertEqual('', err)
362
336
# Out of date bound branch
363
out, err = self.run_bzr('info -v bound')
337
out, err = self.runbzr('info bound')
364
338
self.assertEqualDiff(
365
"""Checkout (format: knit)
368
checkout of branch: standalone
341
checkout of branch: %s
370
343
Related branches:
371
parent branch: standalone
374
347
control: Meta directory format 1
394
367
first revision: %s
395
368
latest revision: %s
399
""" % (branch3.repository._format.get_format_description(),
373
""" % (branch3.bzrdir.root_transport.base,
374
branch1.bzrdir.root_transport.base,
375
branch1.bzrdir.root_transport.base,
376
branch3.repository._format.get_format_description(),
400
377
datestring_first, datestring_first,
378
# poking at _revision_store isn't all that clean, but neither is
379
# having the ui test dependent on the exact overhead of a given store.
380
branch3.repository._revision_store.total_size(
381
branch3.repository.get_transaction())[1] / 1024,
402
383
self.assertEqual('', err)
404
385
# Out of date checkout
405
out, err = self.run_bzr('info -v checkout')
386
out, err = self.runbzr('info checkout')
406
387
self.assertEqualDiff(
407
"""Checkout (format: knit)
409
checkout root: checkout
410
checkout of branch: standalone
390
checkout of branch: %s
413
393
control: Meta directory format 1
433
413
first revision: %s
434
414
latest revision: %s
438
""" % (branch4.repository._format.get_format_description(),
419
""" % (branch4.bzrdir.root_transport.base,
420
branch1.bzrdir.root_transport.base,
421
branch4.repository._format.get_format_description(),
439
422
datestring_first, datestring_first,
423
# poking at _revision_store isn't all that clean, but neither is
424
# having the ui test dependent on the exact overhead of a given store.
425
branch4.repository._revision_store.total_size(
426
branch4.repository.get_transaction())[1] / 1024,
441
428
self.assertEqual('', err)
443
430
# Out of date lightweight checkout
444
out, err = self.run_bzr('info lightcheckout --verbose')
431
out, err = self.runbzr('info lightcheckout --verbose')
445
432
self.assertEqualDiff(
446
"""Lightweight checkout (format: %s)
448
light checkout root: lightcheckout
449
checkout of branch: standalone
434
light checkout root: %s
435
checkout of branch: %s
452
438
control: Meta directory format 1
453
439
working tree: Working tree format 3
454
branch: Branch format 5
455
repository: Knit repository format 1
440
branch: Branch format 4
441
repository: Weave repository format 6
457
443
Working tree is out of date: missing 1 revision.
472
459
first revision: %s
473
460
latest revision: %s
477
""" % (format_description, datestring_first, datestring_last,), out)
465
""" % (tree5.bzrdir.root_transport.base,
466
branch1.bzrdir.root_transport.base,
467
datestring_first, datestring_last,
478
469
self.assertEqual('', err)
480
471
def test_info_standalone_no_tree(self):
481
472
# create standalone branch without a working tree
482
format = bzrdir.format_registry.make_bzrdir('default')
483
473
branch = self.make_branch('branch')
484
474
repo = branch.repository
485
out, err = self.run_bzr('info branch -v')
475
out, err = self.runbzr('info branch')
486
476
self.assertEqualDiff(
487
"""Standalone branch (format: %s)
492
481
control: Meta directory format 1
482
branch: Branch format 5
501
""" % (info.describe_format(repo.bzrdir, repo, branch, None),
502
format.get_branch_format().get_format_description(),
503
format.repository_format.get_format_description(),
491
""" % (branch.bzrdir.root_transport.base,
492
repo._format.get_format_description(),
505
494
self.assertEqual('', err)
507
496
def test_info_shared_repository(self):
508
format = bzrdir.format_registry.make_bzrdir('knit')
497
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
498
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
509
499
transport = self.get_transport()
511
501
# Create shared repository
512
repo = self.make_repository('repo', shared=True, format=format)
502
repo = self.make_repository('repo', shared=True)
513
503
repo.set_make_working_trees(False)
514
out, err = self.run_bzr('info -v repo')
504
out, err = self.runbzr('info repo')
515
505
self.assertEqualDiff(
516
"""Shared repository (format: dirstate or dirstate-tags or knit)
518
507
shared repository: %s
521
510
control: Meta directory format 1
526
""" % ('repo', format.repository_format.get_format_description(),
516
""" % (repo.bzrdir.root_transport.base,
517
repo._format.get_format_description(),
528
519
self.assertEqual('', err)
530
521
# Create branch inside shared repository
531
522
repo.bzrdir.root_transport.mkdir('branch')
532
branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
534
out, err = self.run_bzr('info -v repo/branch')
523
branch1 = repo.bzrdir.create_branch_convenience('repo/branch')
524
out, err = self.runbzr('info repo/branch')
535
525
self.assertEqualDiff(
536
"""Repository branch (format: dirstate or knit)
538
shared repository: repo
539
repository branch: repo/branch
527
shared repository: %s
528
repository branch: branch
542
531
control: Meta directory format 1
532
branch: Branch format 5
551
""" % (format.get_branch_format().get_format_description(),
552
format.repository_format.get_format_description(),
541
""" % (repo.bzrdir.root_transport.base,
542
repo._format.get_format_description(),
554
544
self.assertEqual('', err)
556
546
# Create lightweight checkout
557
547
transport.mkdir('tree')
558
548
transport.mkdir('tree/lightcheckout')
559
tree2 = branch1.create_checkout('tree/lightcheckout',
549
dir2 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
550
bzrlib.branch.BranchReferenceFormat().initialize(dir2, branch1)
551
dir2.create_workingtree()
552
tree2 = dir2.open_workingtree()
561
553
branch2 = tree2.branch
562
self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
563
shared_repo=repo, repo_branch=branch1, verbose=True)
554
self.assertCheckoutStatusOutput('tree/lightcheckout', tree2, shared_repo=repo)
565
556
# Create normal checkout
566
557
tree3 = branch1.create_checkout('tree/checkout')
603
594
first revision: %s
604
595
latest revision: %s
608
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
609
format.repository_format.get_format_description(),
600
""" % (tree2.bzrdir.root_transport.base,
601
repo.bzrdir.root_transport.base,
602
repo._format.get_format_description(),
610
603
datestring_first, datestring_first,
604
# poking at _revision_store isn't all that clean, but neither is
605
# having the ui test dependent on the exact overhead of a given store.
606
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
612
608
self.assertEqual('', err)
614
610
# Out of date checkout
615
out, err = self.run_bzr('info -v tree/checkout')
611
out, err = self.runbzr('info tree/checkout')
616
612
self.assertEqualDiff(
617
"""Checkout (format: unnamed)
619
checkout root: tree/checkout
620
checkout of branch: repo/branch
615
checkout of branch: %s
623
618
control: Meta directory format 1
624
working tree: Working tree format 6
619
working tree: Working tree format 3
620
branch: Branch format 5
628
623
Branch is out of date: missing 1 revision.
680
677
first revision: %s
681
678
latest revision: %s
685
""" % (format.get_branch_format().get_format_description(),
686
format.repository_format.get_format_description(),
683
""" % (tree3.bzrdir.root_transport.base, branch1.bzrdir.root_transport.base,
684
repo._format.get_format_description(),
687
685
datestring_first, datestring_first,
686
# poking at _revision_store isn't all that clean, but neither is
687
# having the ui test dependent on the exact overhead of a given store.
688
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
689
690
self.assertEqual('', err)
690
691
tree3.commit('commit two')
692
693
# Out of date lightweight checkout
693
694
rev = repo.get_revision(branch1.revision_history()[-1])
694
datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
695
out, err = self.run_bzr('info tree/lightcheckout --verbose')
695
datestring_last = format_date(rev.timestamp, rev.timezone)
696
out, err = self.runbzr('info tree/lightcheckout --verbose')
696
697
self.assertEqualDiff(
697
"""Lightweight checkout (format: %s)
699
light checkout root: tree/lightcheckout
700
checkout of branch: repo/branch
701
shared repository: repo
699
light checkout root: %s
700
shared repository: %s
701
repository branch: branch
704
704
control: Meta directory format 1
705
working tree: Working tree format 6
705
working tree: Working tree format 3
706
branch: Branch format 5
709
709
Working tree is out of date: missing 1 revision.
724
725
first revision: %s
725
726
latest revision: %s
729
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
730
format.repository_format.get_format_description(),
731
""" % (tree2.bzrdir.root_transport.base,
732
repo.bzrdir.root_transport.base,
733
repo._format.get_format_description(),
731
734
datestring_first, datestring_last,
735
# poking at _revision_store isn't all that clean, but neither is
736
# having the ui test dependent on the exact overhead of a given store.
737
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
733
739
self.assertEqual('', err)
735
741
# Show info about shared branch
736
out, err = self.run_bzr('info repo/branch --verbose')
742
out, err = self.runbzr('info repo/branch --verbose')
737
743
self.assertEqualDiff(
738
"""Repository branch (format: dirstate or knit)
740
shared repository: repo
741
repository branch: repo/branch
745
shared repository: %s
746
repository branch: branch
744
749
control: Meta directory format 1
750
branch: Branch format 5
751
757
first revision: %s
752
758
latest revision: %s
756
""" % (format.get_branch_format().get_format_description(),
757
format.repository_format.get_format_description(),
763
""" % (repo.bzrdir.root_transport.base,
764
repo._format.get_format_description(),
758
765
datestring_first, datestring_last,
766
# poking at _revision_store isn't all that clean, but neither is
767
# having the ui test dependent on the exact overhead of a given store.
768
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
760
770
self.assertEqual('', err)
762
772
# Show info about repository with revisions
763
out, err = self.run_bzr('info -v repo')
773
out, err = self.runbzr('info repo')
764
774
self.assertEqualDiff(
765
"""Shared repository (format: dirstate or dirstate-tags or knit)
767
shared repository: repo
776
shared repository: %s
770
779
control: Meta directory format 1
775
""" % (format.repository_format.get_format_description(),
785
""" % (repo.bzrdir.root_transport.base,
786
repo._format.get_format_description(),
787
# poking at _revision_store isn't all that clean, but neither is
788
# having the ui test dependent on the exact overhead of a given store.
789
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
777
791
self.assertEqual('', err)
793
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
779
795
def test_info_shared_repository_with_trees(self):
780
format = bzrdir.format_registry.make_bzrdir('knit')
796
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
797
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
781
798
transport = self.get_transport()
783
800
# Create shared repository with working trees
784
repo = self.make_repository('repo', shared=True, format=format)
801
repo = self.make_repository('repo', shared=True)
785
802
repo.set_make_working_trees(True)
786
out, err = self.run_bzr('info -v repo')
803
out, err = self.runbzr('info repo')
787
804
self.assertEqualDiff(
788
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
790
shared repository: repo
806
shared repository: %s
793
809
control: Meta directory format 1
796
812
Create working tree for new branches inside the repository.
800
""" % (format.repository_format.get_format_description(),
817
""" % (repo.bzrdir.root_transport.base,
818
repo._format.get_format_description(),
802
820
self.assertEqual('', err)
804
822
# Create two branches
805
823
repo.bzrdir.root_transport.mkdir('branch1')
806
branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
824
branch1 = repo.bzrdir.create_branch_convenience('repo/branch1')
808
825
branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
810
827
# Empty first branch
811
out, err = self.run_bzr('info repo/branch1 --verbose')
828
out, err = self.runbzr('info repo/branch1 --verbose')
812
829
self.assertEqualDiff(
813
"""Repository tree (format: knit)
815
shared repository: repo
816
repository branch: repo/branch1
831
shared repository: %s
832
repository checkout: branch1
819
835
control: Meta directory format 1
820
836
working tree: Working tree format 3
837
branch: Branch format 5
824
840
In the working tree:
877
894
first revision: %s
878
895
latest revision: %s
882
""" % (format.get_branch_format().get_format_description(),
883
format.repository_format.get_format_description(),
900
""" % (repo.bzrdir.root_transport.base,
901
repo._format.get_format_description(),
884
902
datestring_first, datestring_first,
903
# poking at _revision_store isn't all that clean, but neither is
904
# having the ui test dependent on the exact overhead of a given store.
905
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
886
907
self.assertEqual('', err)
888
909
# Out of date second branch
889
out, err = self.run_bzr('info repo/branch2 --verbose')
910
out, err = self.runbzr('info repo/branch2 --verbose')
890
911
self.assertEqualDiff(
891
"""Repository tree (format: knit)
893
shared repository: repo
894
repository branch: repo/branch2
913
shared repository: %s
914
repository checkout: branch2
896
916
Related branches:
897
parent branch: repo/branch1
900
920
control: Meta directory format 1
901
921
working tree: Working tree format 3
922
branch: Branch format 5
905
925
In the working tree:
920
""" % (format.get_branch_format().get_format_description(),
921
format.repository_format.get_format_description(),
942
""" % (repo.bzrdir.root_transport.base,
943
branch1.bzrdir.root_transport.base,
944
repo._format.get_format_description(),
945
# poking at _revision_store isn't all that clean, but neither is
946
# having the ui test dependent on the exact overhead of a given store.
947
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
923
949
self.assertEqual('', err)
925
951
# Update second branch
926
952
tree2 = branch2.bzrdir.open_workingtree()
927
953
tree2.pull(branch1)
928
out, err = self.run_bzr('info -v repo/branch2')
954
out, err = self.runbzr('info repo/branch2')
929
955
self.assertEqualDiff(
930
"""Repository tree (format: knit)
932
shared repository: repo
933
repository branch: repo/branch2
957
shared repository: %s
958
repository checkout: branch2
935
960
Related branches:
936
parent branch: repo/branch1
939
964
control: Meta directory format 1
940
965
working tree: Working tree format 3
966
branch: Branch format 5
944
969
In the working tree:
957
982
first revision: %s
958
983
latest revision: %s
962
""" % (format.get_branch_format().get_format_description(),
963
format.repository_format.get_format_description(),
988
""" % (repo.bzrdir.root_transport.base,
989
branch1.bzrdir.root_transport.base,
990
repo._format.get_format_description(),
964
991
datestring_first, datestring_first,
992
# poking at _revision_store isn't all that clean, but neither is
993
# having the ui test dependent on the exact overhead of a given store.
994
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
966
996
self.assertEqual('', err)
968
998
# Show info about repository with revisions
969
out, err = self.run_bzr('info -v repo')
999
out, err = self.runbzr('info repo')
970
1000
self.assertEqualDiff(
971
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
973
shared repository: repo
1002
shared repository: %s
976
1005
control: Meta directory format 1
979
1008
Create working tree for new branches inside the repository.
983
""" % (format.repository_format.get_format_description(),
1013
""" % (repo.bzrdir.root_transport.base,
1014
repo._format.get_format_description(),
1015
# poking at _revision_store isn't all that clean, but neither is
1016
# having the ui test dependent on the exact overhead of a given store.
1017
repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
986
1020
self.assertEqual('', err)
1022
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
988
1024
def test_info_shared_repository_with_tree_in_root(self):
989
format = bzrdir.format_registry.make_bzrdir('knit')
1025
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
1026
bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
990
1027
transport = self.get_transport()
992
1029
# Create shared repository with working trees
993
repo = self.make_repository('repo', shared=True, format=format)
1030
repo = self.make_repository('repo', shared=True)
994
1031
repo.set_make_working_trees(True)
995
out, err = self.run_bzr('info -v repo')
1032
out, err = self.runbzr('info repo')
996
1033
self.assertEqualDiff(
997
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
999
shared repository: repo
1035
shared repository: %s
1002
1038
control: Meta directory format 1
1040
1077
Branch history:
1045
""" % (format.get_branch_format().get_format_description(),
1046
format.repository_format.get_format_description(),
1048
self.assertEqual('', err)
1050
def test_info_repository_hook(self):
1051
format = bzrdir.format_registry.make_bzrdir('knit')
1052
def repo_info(repo, stats, outf):
1053
outf.write("more info\n")
1054
info.hooks.install_named_hook('repository', repo_info, None)
1055
# Create shared repository with working trees
1056
repo = self.make_repository('repo', shared=True, format=format)
1057
out, err = self.run_bzr('info -v repo')
1058
self.assertEqualDiff(
1059
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1061
shared repository: repo
1064
control: Meta directory format 1
1067
Create working tree for new branches inside the repository.
1072
""" % (format.repository_format.get_format_description(),
1074
self.assertEqual('', err)
1076
def assertCheckoutStatusOutput(self,
1083
""" % (repo.bzrdir.root_transport.base,
1084
repo._format.get_format_description(),
1086
self.assertEqual('', err)
1088
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
1090
def assertCheckoutStatusOutput(self,
1077
1091
command_string, lco_tree, shared_repo=None,
1078
1092
repo_branch=None,
1079
1093
tree_locked=False,
1080
1094
branch_locked=False, repo_locked=False,
1082
light_checkout=True,
1083
checkout_root=None):
1084
"""Check the output of info in a checkout.
1096
light_checkout=True):
1097
"""Check the output of info in a light checkout tree.
1086
1099
This is not quite a mirror of the info code: rather than using the
1087
1100
tree being examined to predict output, it uses a bunch of flags which
1088
1101
allow us, the test writers, to document what *should* be present in
1089
1102
the output. Removing this separation would remove the value of the
1092
1105
:param path: the path to the light checkout.
1093
1106
:param lco_tree: the tree object for the light checkout.
1094
1107
:param shared_repo: A shared repository is in use, expect that in
1098
1111
:param tree_locked: If true, expect the tree to be locked.
1099
1112
:param branch_locked: If true, expect the branch to be locked.
1100
1113
:param repo_locked: If true, expect the repository to be locked.
1101
Note that the lco_tree.branch.repository is inspected, and if is not
1102
actually locked then this parameter is overridden. This is because
1103
pack repositories do not have any public API for obtaining an
1104
exclusive repository wide lock.
1105
:param verbose: verbosity level: 2 or higher to show committers
1114
:param verbose: If true, expect verbose output
1107
def friendly_location(url):
1108
path = urlutils.unescape_for_display(url, 'ascii')
1110
return osutils.relpath(osutils.getcwd(), path)
1111
except errors.PathNotChild:
1115
# We expect this to fail because of locking errors.
1116
# (A write-locked file cannot be read-locked
1117
# in the different process -- either on win32 or on linux).
1118
# This should be removed when the locking errors are fixed.
1119
self.expectFailure('OS locks are exclusive '
1120
'for different processes (Bug #174055)',
1121
self.run_bzr_subprocess,
1122
'info ' + command_string)
1123
out, err = self.run_bzr('info %s' % command_string)
1125
(True, True): 'Lightweight checkout',
1126
(True, False): 'Repository checkout',
1127
(False, True): 'Lightweight checkout',
1128
(False, False): 'Checkout',
1129
}[(shared_repo is not None, light_checkout)]
1130
format = {True: self._repo_strings,
1131
False: 'unnamed'}[light_checkout]
1133
repo_locked = lco_tree.branch.repository.get_physical_lock_status()
1116
out, err = self.runbzr('info %s' % command_string)
1134
1117
if repo_locked or branch_locked or tree_locked:
1135
1118
def locked_message(a_bool):
1148
1131
locked_message(repo_locked)))
1150
1133
expected_lock_output = ''
1153
1134
if light_checkout:
1154
tree_data = (" light checkout root: %s\n" %
1155
friendly_location(lco_tree.bzrdir.root_transport.base))
1157
if lco_tree.branch.get_bound_location() is not None:
1158
tree_data += ("%s checkout root: %s\n" % (extra_space,
1159
friendly_location(lco_tree.branch.bzrdir.root_transport.base)))
1135
tree_data = (" light checkout root: %s" %
1136
lco_tree.bzrdir.root_transport.base)
1138
tree_data = (" checkout root: %s" %
1139
lco_tree.bzrdir.root_transport.base)
1160
1140
if shared_repo is not None:
1161
1141
branch_data = (
1162
" checkout of branch: %s\n"
1163
" shared repository: %s\n" %
1164
(friendly_location(repo_branch.bzrdir.root_transport.base),
1165
friendly_location(shared_repo.bzrdir.root_transport.base)))
1142
" shared repository: %s\n"
1143
" repository branch: branch\n" %
1144
shared_repo.bzrdir.root_transport.base)
1166
1145
elif repo_branch is not None:
1167
1146
branch_data = (
1168
"%s checkout of branch: %s\n" %
1170
friendly_location(repo_branch.bzrdir.root_transport.base)))
1147
" checkout of branch: %s\n" %
1148
repo_branch.bzrdir.root_transport.base)
1172
branch_data = (" checkout of branch: %s\n" %
1150
branch_data = (" checkout of branch: %s\n" %
1173
1151
lco_tree.branch.bzrdir.root_transport.base)
1176
1154
verbose_info = ' 0 committers\n'
1178
1156
verbose_info = ''
1180
1158
self.assertEqualDiff(
1185
1163
control: Meta directory format 1
1186
1164
working tree: %s
1165
branch: Branch format 5
1190
1168
In the working tree:
1218
1194
transport = self.get_transport()
1219
1195
# Create shared repository with a branch
1220
1196
repo = self.make_repository('repo', shared=True,
1221
format=bzrdir.BzrDirMetaFormat1())
1197
format=bzrlib.bzrdir.BzrDirMetaFormat1())
1222
1198
repo.set_make_working_trees(False)
1223
1199
repo.bzrdir.root_transport.mkdir('branch')
1224
1200
repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
1225
format=bzrdir.BzrDirMetaFormat1())
1201
format=bzrlib.bzrdir.BzrDirMetaFormat1())
1226
1202
# Do a heavy checkout
1227
1203
transport.mkdir('tree')
1228
1204
transport.mkdir('tree/checkout')
1229
co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1230
format=bzrdir.BzrDirMetaFormat1())
1205
co_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1206
format=bzrlib.bzrdir.BzrDirMetaFormat1())
1231
1207
co_branch.bind(repo_branch)
1232
1208
# Do a light checkout of the heavy one
1233
1209
transport.mkdir('tree/lightcheckout')
1234
lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1235
branch.BranchReferenceFormat().initialize(lco_dir,
1236
target_branch=co_branch)
1210
lco_dir = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1211
bzrlib.branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1237
1212
lco_dir.create_workingtree()
1238
1213
lco_tree = lco_dir.open_workingtree()
1244
self.assertCheckoutStatusOutput('-v tree/lightcheckout', lco_tree,
1245
repo_branch=repo_branch,
1246
verbose=True, light_checkout=True)
1219
self.assertCheckoutStatusOutput('tree/lightcheckout', lco_tree)
1248
1221
lco_tree.branch.repository.lock_write()
1250
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1251
lco_tree, repo_branch=repo_branch,
1252
repo_locked=True, verbose=True, light_checkout=True)
1223
self.assertCheckoutStatusOutput('tree/lightcheckout',
1254
1227
lco_tree.branch.repository.unlock()
1256
1229
lco_tree.branch.lock_write()
1258
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1231
self.assertCheckoutStatusOutput('tree/lightcheckout',
1260
1233
branch_locked=True,
1262
repo_branch=repo_branch,
1265
1236
lco_tree.branch.unlock()
1267
1238
lco_tree.lock_write()
1269
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1270
lco_tree, repo_branch=repo_branch,
1240
self.assertCheckoutStatusOutput('tree/lightcheckout',
1271
1242
tree_locked=True,
1272
1243
branch_locked=True,
1276
1246
lco_tree.unlock()
1278
1248
lco_tree.lock_write()
1279
1249
lco_tree.branch.repository.unlock()
1281
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1282
lco_tree, repo_branch=repo_branch,
1251
self.assertCheckoutStatusOutput('tree/lightcheckout',
1283
1253
tree_locked=True,
1287
1256
lco_tree.branch.repository.lock_write()
1288
1257
lco_tree.unlock()
1315
1282
lco_tree.branch.lock_write()
1316
1283
lco_tree.branch.repository.unlock()
1318
self.assertCheckoutStatusOutput('-v tree/lightcheckout',
1319
lco_tree, repo_branch=repo_branch,
1285
self.assertCheckoutStatusOutput('tree/lightcheckout',
1323
1289
lco_tree.branch.repository.lock_write()
1324
1290
lco_tree.branch.unlock()
1326
if sys.platform == 'win32':
1327
self.knownFailure('Win32 cannot run "bzr info"'
1328
' when the tree is locked.')
1330
def test_info_stacked(self):
1331
# We have a mainline
1332
trunk_tree = self.make_branch_and_tree('mainline',
1334
trunk_tree.commit('mainline')
1335
# and a branch from it which is stacked
1336
new_dir = trunk_tree.bzrdir.sprout('newbranch', stacked=True)
1337
out, err = self.run_bzr('info newbranch')
1339
"""Standalone tree (format: 1.6)
1341
branch root: newbranch
1344
parent branch: mainline
1345
stacked on: mainline
1347
self.assertEqual("", err)
1292
def test_info_locking_oslocks(self):
1293
if sys.platform == "win32":
1294
raise TestSkipped("don't use oslocks on win32 in unix manner")
1296
tree = self.make_branch_and_tree('branch',
1297
format=bzrlib.bzrdir.BzrDirFormat6())
1299
# Test all permutations of locking the working tree, branch and repository
1300
# XXX: Well not yet, as we can't query oslocks yet. Currently, it's
1301
# implemented by raising NotImplementedError and get_physical_lock_status()
1302
# always returns false. This makes bzr info hide the lock status. (Olaf)
1306
out, err = self.runbzr('info branch')
1307
self.assertEqualDiff(
1312
control: All-in-one format 6
1313
working tree: Working tree format 2
1314
branch: Branch format 4
1317
In the working tree:
1325
0 versioned subdirectories
1333
""" % (tree.bzrdir.root_transport.base,
1334
tree.branch.repository._format.get_format_description(),
1336
self.assertEqual('', err)
1339
out, err = self.runbzr('info branch')
1340
self.assertEqualDiff(
1345
control: All-in-one format 6
1346
working tree: Working tree format 2
1347
branch: Branch format 4
1350
In the working tree:
1358
0 versioned subdirectories
1366
""" % (tree.bzrdir.root_transport.base,
1367
tree.branch.repository._format.get_format_description(),
1369
self.assertEqual('', err)