~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Andrew Bennetts
  • Date: 2009-10-13 05:20:50 UTC
  • mfrom: (4634.52.16 2.0)
  • mto: This revision was merged to the branch mainline in revision 4738.
  • Revision ID: andrew.bennetts@canonical.com-20091013052050-u1w6tv0z7kqhn8d0
Merge 2.0 into lp:bzr, resolving conflicts in NEWS and releasing.txt.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2012 Canonical Ltd
 
1
# Copyright (C) 2006, 2007, 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
17
17
 
18
18
"""Tests for the info command of bzr."""
19
19
 
20
 
import shutil
21
20
import sys
22
21
 
23
22
from bzrlib import (
24
23
    branch,
25
24
    bzrdir,
26
 
    controldir,
27
25
    errors,
28
26
    info,
29
27
    osutils,
30
 
    tests,
31
28
    upgrade,
32
29
    urlutils,
33
30
    )
34
 
from bzrlib.tests.matchers import ContainsNoVfsCalls
35
 
from bzrlib.transport import memory
36
 
 
37
 
 
38
 
class TestInfo(tests.TestCaseWithTransport):
 
31
from bzrlib.osutils import format_date
 
32
from bzrlib.tests import TestSkipped, MemoryServer
 
33
from bzrlib.tests.blackbox import ExternalBase
 
34
 
 
35
 
 
36
class TestInfo(ExternalBase):
39
37
 
40
38
    def setUp(self):
41
 
        super(TestInfo, self).setUp()
42
 
        self._repo_strings = "2a"
 
39
        ExternalBase.setUp(self)
 
40
        self._repo_strings = "2a or development-subtree"
43
41
 
44
42
    def test_info_non_existing(self):
45
 
        self.vfs_transport_factory = memory.MemoryServer
 
43
        self.vfs_transport_factory = MemoryServer
46
44
        location = self.get_url()
47
45
        out, err = self.run_bzr('info '+location, retcode=3)
48
46
        self.assertEqual(out, '')
49
47
        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
50
48
 
51
 
    def test_info_empty_controldir(self):
52
 
        self.make_bzrdir('ctrl')
53
 
        out, err = self.run_bzr('info ctrl')
54
 
        self.assertEquals(out,
55
 
            'Empty control directory (format: 2a or pack-0.92)\n'
56
 
            'Location:\n'
57
 
            '  control directory: ctrl\n')
58
 
        self.assertEquals(err, '')
59
 
 
60
 
    def test_info_empty_controldir_verbose(self):
61
 
        self.make_bzrdir('ctrl')
62
 
        out, err = self.run_bzr('info -v ctrl')
63
 
        self.assertEqualDiff(out,
64
 
            'Empty control directory (format: 2a or pack-0.92)\n'
65
 
            'Location:\n'
66
 
            '  control directory: ctrl\n\n'
67
 
            'Format:\n'
68
 
            '       control: Meta directory format 1\n\n'
69
 
            'Control directory:\n'
70
 
            '         0 branches\n')
71
 
        self.assertEquals(err, '')
72
 
 
73
 
    def test_info_dangling_branch_reference(self):
74
 
        br = self.make_branch('target')
75
 
        br.create_checkout('from', lightweight=True)
76
 
        shutil.rmtree('target')
77
 
        out, err = self.run_bzr('info from')
78
 
        self.assertEquals(out,
79
 
            'Dangling branch reference (format: 2a or pack-0.92)\n'
80
 
            'Location:\n'
81
 
            '   control directory: from\n'
82
 
            '  checkout of branch: target\n')
83
 
        self.assertEquals(err, '')
84
 
 
85
49
    def test_info_standalone(self):
86
50
        transport = self.get_transport()
87
51
 
88
52
        # Create initial standalone branch
89
 
        tree1 = self.make_branch_and_tree('standalone', 'knit')
 
53
        tree1 = self.make_branch_and_tree('standalone', 'weave')
90
54
        self.build_tree(['standalone/a'])
91
55
        tree1.add('a')
92
56
        branch1 = tree1.branch
93
57
 
94
58
        out, err = self.run_bzr('info standalone')
95
59
        self.assertEqualDiff(
96
 
"""Standalone tree (format: knit)
 
60
"""Standalone tree (format: weave)
97
61
Location:
98
62
  branch root: standalone
99
63
""", out)
102
66
        # Standalone branch - verbose mode
103
67
        out, err = self.run_bzr('info standalone -v')
104
68
        self.assertEqualDiff(
105
 
"""Standalone tree (format: knit)
 
69
"""Standalone tree (format: weave)
106
70
Location:
107
71
  branch root: standalone
108
72
 
109
73
Format:
110
 
       control: Meta directory format 1
111
 
  working tree: Working tree format 3
112
 
        branch: Branch format 5
113
 
    repository: Knit repository format 1
114
 
 
115
 
Control directory:
116
 
         1 branches
 
74
       control: All-in-one format 6
 
75
  working tree: Working tree format 2
 
76
        branch: Branch format 4
 
77
    repository: Weave repository format 6
117
78
 
118
79
In the working tree:
119
80
         0 unchanged
136
97
        # Standalone branch - really verbose mode
137
98
        out, err = self.run_bzr('info standalone -vv')
138
99
        self.assertEqualDiff(
139
 
"""Standalone tree (format: knit)
 
100
"""Standalone tree (format: weave)
140
101
Location:
141
102
  branch root: standalone
142
103
 
143
104
Format:
144
 
       control: Meta directory format 1
145
 
  working tree: Working tree format 3
146
 
        branch: Branch format 5
147
 
    repository: Knit repository format 1
148
 
 
149
 
Control directory:
150
 
         1 branches
 
105
       control: All-in-one format 6
 
106
  working tree: Working tree format 2
 
107
        branch: Branch format 4
 
108
    repository: Weave repository format 6
151
109
 
152
110
In the working tree:
153
111
         0 unchanged
168
126
""", out)
169
127
        self.assertEqual('', err)
170
128
        tree1.commit('commit one')
171
 
        rev = branch1.repository.get_revision(branch1.last_revision())
172
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
129
        rev = branch1.repository.get_revision(branch1.revision_history()[0])
 
130
        datestring_first = format_date(rev.timestamp, rev.timezone)
173
131
 
174
132
        # Branch standalone with push location
175
133
        branch2 = branch1.bzrdir.sprout('branch').open_branch()
177
135
 
178
136
        out, err = self.run_bzr('info branch')
179
137
        self.assertEqualDiff(
180
 
"""Standalone tree (format: knit)
 
138
"""Standalone tree (format: weave)
181
139
Location:
182
140
  branch root: branch
183
141
 
189
147
 
190
148
        out, err = self.run_bzr('info branch --verbose')
191
149
        self.assertEqualDiff(
192
 
"""Standalone tree (format: knit)
 
150
"""Standalone tree (format: weave)
193
151
Location:
194
152
  branch root: branch
195
153
 
198
156
  parent branch: standalone
199
157
 
200
158
Format:
201
 
       control: Meta directory format 1
202
 
  working tree: Working tree format 3
203
 
        branch: Branch format 5
204
 
    repository: Knit repository format 1
205
 
 
206
 
Control directory:
207
 
         1 branches
 
159
       control: All-in-one format 6
 
160
  working tree: Working tree format 2
 
161
        branch: Branch format 4
 
162
    repository: Weave repository format 6
208
163
 
209
164
In the working tree:
210
165
         1 unchanged
231
186
        # Branch and bind to standalone, needs upgrade to metadir
232
187
        # (creates backup as unknown)
233
188
        branch1.bzrdir.sprout('bound')
234
 
        knit1_format = controldir.format_registry.make_bzrdir('knit')
 
189
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
235
190
        upgrade.upgrade('bound', knit1_format)
236
 
        branch3 = controldir.ControlDir.open('bound').open_branch()
 
191
        branch3 = bzrdir.BzrDir.open('bound').open_branch()
237
192
        branch3.bind(branch1)
238
193
        bound_tree = branch3.bzrdir.open_workingtree()
239
194
        out, err = self.run_bzr('info -v bound')
252
207
        branch: %s
253
208
    repository: %s
254
209
 
255
 
Control directory:
256
 
         1 branches
257
 
 
258
210
In the working tree:
259
211
         1 unchanged
260
212
         0 modified
261
213
         0 added
262
214
         0 removed
263
215
         0 renamed
264
 
         0 unknown
 
216
         1 unknown
265
217
         0 ignored
266
218
         0 versioned subdirectories
267
219
 
281
233
        self.assertEqual('', err)
282
234
 
283
235
        # Checkout standalone (same as above, but does not have parent set)
284
 
        branch4 = controldir.ControlDir.create_branch_convenience('checkout',
 
236
        branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
285
237
            format=knit1_format)
286
238
        branch4.bind(branch1)
287
239
        branch4.bzrdir.open_workingtree().update()
298
250
        branch: Branch format 5
299
251
    repository: %s
300
252
 
301
 
Control directory:
302
 
         1 branches
303
 
 
304
253
In the working tree:
305
254
         1 unchanged
306
255
         0 modified
328
277
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
329
278
        branch5 = tree5.branch
330
279
        out, err = self.run_bzr('info -v lightcheckout')
331
 
        if "metaweave" in controldir.format_registry:
332
 
            format_description = "knit or metaweave"
333
 
        else:
334
 
            format_description = "knit"
335
280
        self.assertEqualDiff(
336
281
"""Lightweight checkout (format: %s)
337
282
Location:
340
285
 
341
286
Format:
342
287
       control: Meta directory format 1
343
 
  working tree: Working tree format 3
344
 
        branch: Branch format 5
345
 
    repository: Knit repository format 1
346
 
 
347
 
Control directory:
348
 
         1 branches
 
288
  working tree: Working tree format 6
 
289
        branch: Branch format 4
 
290
    repository: Weave repository format 6
349
291
 
350
292
In the working tree:
351
293
         1 unchanged
365
307
 
366
308
Repository:
367
309
         1 revision
368
 
""" % (format_description, datestring_first, datestring_first,), out)
 
310
""" % (self._repo_strings, datestring_first, datestring_first,), out)
369
311
        self.assertEqual('', err)
370
312
 
371
313
        # Update initial standalone branch
372
314
        self.build_tree(['standalone/b'])
373
315
        tree1.add('b')
374
316
        tree1.commit('commit two')
375
 
        rev = branch1.repository.get_revision(branch1.last_revision())
376
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
317
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
 
318
        datestring_last = format_date(rev.timestamp, rev.timezone)
377
319
 
378
320
        # Out of date branched standalone branch will not be detected
379
321
        out, err = self.run_bzr('info -v branch')
380
322
        self.assertEqualDiff(
381
 
"""Standalone tree (format: knit)
 
323
"""Standalone tree (format: weave)
382
324
Location:
383
325
  branch root: branch
384
326
 
387
329
  parent branch: standalone
388
330
 
389
331
Format:
390
 
       control: Meta directory format 1
391
 
  working tree: Working tree format 3
392
 
        branch: Branch format 5
393
 
    repository: Knit repository format 1
394
 
 
395
 
Control directory:
396
 
         1 branches
 
332
       control: All-in-one format 6
 
333
  working tree: Working tree format 2
 
334
        branch: Branch format 4
 
335
    repository: Weave repository format 6
397
336
 
398
337
In the working tree:
399
338
         1 unchanged
434
373
        branch: Branch format 5
435
374
    repository: %s
436
375
 
437
 
Control directory:
438
 
         1 branches
439
 
 
440
376
Branch is out of date: missing 1 revision.
441
377
 
442
378
In the working tree:
445
381
         0 added
446
382
         0 removed
447
383
         0 renamed
448
 
         0 unknown
 
384
         1 unknown
449
385
         0 ignored
450
386
         0 versioned subdirectories
451
387
 
476
412
        branch: Branch format 5
477
413
    repository: %s
478
414
 
479
 
Control directory:
480
 
         1 branches
481
 
 
482
415
Branch is out of date: missing 1 revision.
483
416
 
484
417
In the working tree:
514
447
 
515
448
Format:
516
449
       control: Meta directory format 1
517
 
  working tree: Working tree format 3
518
 
        branch: Branch format 5
519
 
    repository: Knit repository format 1
520
 
 
521
 
Control directory:
522
 
         1 branches
 
450
  working tree: Working tree format 6
 
451
        branch: Branch format 4
 
452
    repository: Weave repository format 6
523
453
 
524
454
Working tree is out of date: missing 1 revision.
525
455
 
541
471
 
542
472
Repository:
543
473
         2 revisions
544
 
""" % (format_description, datestring_first, datestring_last,), out)
 
474
""" % (self._repo_strings, datestring_first, datestring_last,), out)
545
475
        self.assertEqual('', err)
546
476
 
547
477
    def test_info_standalone_no_tree(self):
548
478
        # create standalone branch without a working tree
549
 
        format = controldir.format_registry.make_bzrdir('default')
 
479
        format = bzrdir.format_registry.make_bzrdir('default')
550
480
        branch = self.make_branch('branch')
551
481
        repo = branch.repository
552
482
        out, err = self.run_bzr('info branch -v')
560
490
        branch: %s
561
491
    repository: %s
562
492
 
563
 
Control directory:
564
 
         1 branches
565
 
 
566
493
Branch history:
567
494
         0 revisions
568
495
 
575
502
        self.assertEqual('', err)
576
503
 
577
504
    def test_info_shared_repository(self):
578
 
        format = controldir.format_registry.make_bzrdir('knit')
 
505
        format = bzrdir.format_registry.make_bzrdir('knit')
579
506
        transport = self.get_transport()
580
507
 
581
508
        # Create shared repository
591
518
       control: Meta directory format 1
592
519
    repository: %s
593
520
 
594
 
Control directory:
595
 
         0 branches
596
 
 
597
521
Repository:
598
522
         0 revisions
599
523
""" % ('repo', format.repository_format.get_format_description(),
602
526
 
603
527
        # Create branch inside shared repository
604
528
        repo.bzrdir.root_transport.mkdir('branch')
605
 
        branch1 = controldir.ControlDir.create_branch_convenience(
606
 
            'repo/branch', format=format)
 
529
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
 
530
            format=format)
607
531
        out, err = self.run_bzr('info -v repo/branch')
608
532
        self.assertEqualDiff(
609
533
"""Repository branch (format: dirstate or knit)
616
540
        branch: %s
617
541
    repository: %s
618
542
 
619
 
Control directory:
620
 
         1 branches
621
 
 
622
543
Branch history:
623
544
         0 revisions
624
545
 
647
568
        self.build_tree(['tree/lightcheckout/a'])
648
569
        tree2.add('a')
649
570
        tree2.commit('commit one')
650
 
        rev = repo.get_revision(branch2.last_revision())
651
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
571
        rev = repo.get_revision(branch2.revision_history()[0])
 
572
        datestring_first = format_date(rev.timestamp, rev.timezone)
652
573
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
653
574
        self.assertEqualDiff(
654
575
"""Lightweight checkout (format: %s)
663
584
        branch: %s
664
585
    repository: %s
665
586
 
666
 
Control directory:
667
 
         1 branches
668
 
 
669
587
In the working tree:
670
588
         1 unchanged
671
589
         0 modified
704
622
        branch: %s
705
623
    repository: %s
706
624
 
707
 
Control directory:
708
 
         1 branches
709
 
 
710
625
Branch is out of date: missing 1 revision.
711
626
 
712
627
In the working tree:
746
661
        branch: %s
747
662
    repository: %s
748
663
 
749
 
Control directory:
750
 
         1 branches
751
 
 
752
664
In the working tree:
753
665
         1 unchanged
754
666
         0 modified
775
687
        tree3.commit('commit two')
776
688
 
777
689
        # Out of date lightweight checkout
778
 
        rev = repo.get_revision(branch1.last_revision())
779
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
690
        rev = repo.get_revision(branch1.revision_history()[-1])
 
691
        datestring_last = format_date(rev.timestamp, rev.timezone)
780
692
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
781
693
        self.assertEqualDiff(
782
694
"""Lightweight checkout (format: %s)
791
703
        branch: %s
792
704
    repository: %s
793
705
 
794
 
Control directory:
795
 
         1 branches
796
 
 
797
706
Working tree is out of date: missing 1 revision.
798
707
 
799
708
In the working tree:
833
742
        branch: %s
834
743
    repository: %s
835
744
 
836
 
Control directory:
837
 
         1 branches
838
 
 
839
745
Branch history:
840
746
         2 revisions
841
747
         0 days old
861
767
       control: Meta directory format 1
862
768
    repository: %s
863
769
 
864
 
Control directory:
865
 
         0 branches
866
 
 
867
770
Repository:
868
771
         2 revisions
869
772
""" % (format.repository_format.get_format_description(),
871
774
        self.assertEqual('', err)
872
775
 
873
776
    def test_info_shared_repository_with_trees(self):
874
 
        format = controldir.format_registry.make_bzrdir('knit')
 
777
        format = bzrdir.format_registry.make_bzrdir('knit')
875
778
        transport = self.get_transport()
876
779
 
877
780
        # Create shared repository with working trees
887
790
       control: Meta directory format 1
888
791
    repository: %s
889
792
 
890
 
Control directory:
891
 
         0 branches
892
 
 
893
793
Create working tree for new branches inside the repository.
894
794
 
895
795
Repository:
900
800
 
901
801
        # Create two branches
902
802
        repo.bzrdir.root_transport.mkdir('branch1')
903
 
        branch1 = controldir.ControlDir.create_branch_convenience('repo/branch1',
 
803
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
904
804
            format=format)
905
805
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
906
806
 
918
818
        branch: %s
919
819
    repository: %s
920
820
 
921
 
Control directory:
922
 
         1 branches
923
 
 
924
821
In the working tree:
925
822
         0 unchanged
926
823
         0 modified
946
843
        tree1 = branch1.bzrdir.open_workingtree()
947
844
        tree1.add('a')
948
845
        tree1.commit('commit one')
949
 
        rev = repo.get_revision(branch1.last_revision())
950
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
846
        rev = repo.get_revision(branch1.revision_history()[0])
 
847
        datestring_first = format_date(rev.timestamp, rev.timezone)
951
848
        out, err = self.run_bzr('info -v repo/branch1')
952
849
        self.assertEqualDiff(
953
850
"""Repository tree (format: knit)
961
858
        branch: %s
962
859
    repository: %s
963
860
 
964
 
Control directory:
965
 
         1 branches
966
 
 
967
861
In the working tree:
968
862
         1 unchanged
969
863
         0 modified
1005
899
        branch: %s
1006
900
    repository: %s
1007
901
 
1008
 
Control directory:
1009
 
         1 branches
1010
 
 
1011
902
In the working tree:
1012
903
         0 unchanged
1013
904
         0 modified
1047
938
        branch: %s
1048
939
    repository: %s
1049
940
 
1050
 
Control directory:
1051
 
         1 branches
1052
 
 
1053
941
In the working tree:
1054
942
         1 unchanged
1055
943
         0 modified
1085
973
       control: Meta directory format 1
1086
974
    repository: %s
1087
975
 
1088
 
Control directory:
1089
 
         0 branches
1090
 
 
1091
976
Create working tree for new branches inside the repository.
1092
977
 
1093
978
Repository:
1098
983
        self.assertEqual('', err)
1099
984
 
1100
985
    def test_info_shared_repository_with_tree_in_root(self):
1101
 
        format = controldir.format_registry.make_bzrdir('knit')
 
986
        format = bzrdir.format_registry.make_bzrdir('knit')
1102
987
        transport = self.get_transport()
1103
988
 
1104
989
        # Create shared repository with working trees
1114
999
       control: Meta directory format 1
1115
1000
    repository: %s
1116
1001
 
1117
 
Control directory:
1118
 
         0 branches
1119
 
 
1120
1002
Create working tree for new branches inside the repository.
1121
1003
 
1122
1004
Repository:
1142
1024
        branch: %s
1143
1025
    repository: %s
1144
1026
 
1145
 
Control directory:
1146
 
         1 branches
1147
 
 
1148
1027
In the working tree:
1149
1028
         0 unchanged
1150
1029
         0 modified
1166
1045
        self.assertEqual('', err)
1167
1046
 
1168
1047
    def test_info_repository_hook(self):
1169
 
        format = controldir.format_registry.make_bzrdir('knit')
 
1048
        format = bzrdir.format_registry.make_bzrdir('knit')
1170
1049
        def repo_info(repo, stats, outf):
1171
1050
            outf.write("more info\n")
1172
1051
        info.hooks.install_named_hook('repository', repo_info, None)
1182
1061
       control: Meta directory format 1
1183
1062
    repository: %s
1184
1063
 
1185
 
Control directory:
1186
 
         0 branches
1187
 
 
1188
1064
Create working tree for new branches inside the repository.
1189
1065
 
1190
1066
Repository:
1194
1070
       ), out)
1195
1071
        self.assertEqual('', err)
1196
1072
 
1197
 
    def test_info_unshared_repository_with_colocated_branches(self):
1198
 
        format = controldir.format_registry.make_bzrdir('development-colo')
1199
 
        transport = self.get_transport()
1200
 
 
1201
 
        # Create unshared repository
1202
 
        repo = self.make_repository('repo', shared=False, format=format)
1203
 
        repo.set_make_working_trees(True)
1204
 
        repo.bzrdir.create_branch(name='foo')
1205
 
        out, err = self.run_bzr('info repo')
1206
 
        self.assertEqualDiff(
1207
 
"""Unshared repository with trees and colocated branches (format: development-colo)
1208
 
Location:
1209
 
  repository: repo
1210
 
""", out)
1211
 
        self.assertEqual('', err)
1212
 
 
1213
1073
    def assertCheckoutStatusOutput(self,
1214
1074
        command_string, lco_tree, shared_repo=None,
1215
1075
        repo_branch=None,
1324
1184
        branch: %s
1325
1185
    repository: %s
1326
1186
%s
1327
 
Control directory:
1328
 
         1 branches
1329
 
 
1330
1187
In the working tree:
1331
1188
         0 unchanged
1332
1189
         0 modified
1361
1218
                                    format=bzrdir.BzrDirMetaFormat1())
1362
1219
        repo.set_make_working_trees(False)
1363
1220
        repo.bzrdir.root_transport.mkdir('branch')
1364
 
        repo_branch = controldir.ControlDir.create_branch_convenience(
1365
 
            'repo/branch', format=bzrdir.BzrDirMetaFormat1())
 
1221
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
 
1222
                                    format=bzrdir.BzrDirMetaFormat1())
1366
1223
        # Do a heavy checkout
1367
1224
        transport.mkdir('tree')
1368
1225
        transport.mkdir('tree/checkout')
1369
 
        co_branch = controldir.ControlDir.create_branch_convenience(
1370
 
            'tree/checkout', format=bzrdir.BzrDirMetaFormat1())
 
1226
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1227
            format=bzrdir.BzrDirMetaFormat1())
1371
1228
        co_branch.bind(repo_branch)
1372
1229
        # Do a light checkout of the heavy one
1373
1230
        transport.mkdir('tree/lightcheckout')
1374
1231
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1375
 
        lco_dir.set_branch_reference(co_branch)
 
1232
        branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1376
1233
        lco_dir.create_workingtree()
1377
1234
        lco_tree = lco_dir.open_workingtree()
1378
1235
 
1466
1323
            self.knownFailure('Win32 cannot run "bzr info"'
1467
1324
                              ' when the tree is locked.')
1468
1325
 
 
1326
    def test_info_locking_oslocks(self):
 
1327
        if sys.platform == "win32":
 
1328
            raise TestSkipped("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
 
1332
        # call here.
 
1333
        self.thisFailsStrictLockCheck()
 
1334
 
 
1335
        tree = self.make_branch_and_tree('branch',
 
1336
                                         format=bzrdir.BzrDirFormat6())
 
1337
 
 
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)
 
1342
        # W B R
 
1343
 
 
1344
        # U U U
 
1345
        out, err = self.run_bzr('info -v branch')
 
1346
        self.assertEqualDiff(
 
1347
"""Standalone tree (format: weave)
 
1348
Location:
 
1349
  branch root: %s
 
1350
 
 
1351
Format:
 
1352
       control: All-in-one format 6
 
1353
  working tree: Working tree format 2
 
1354
        branch: Branch format 4
 
1355
    repository: %s
 
1356
 
 
1357
In the working tree:
 
1358
         0 unchanged
 
1359
         0 modified
 
1360
         0 added
 
1361
         0 removed
 
1362
         0 renamed
 
1363
         0 unknown
 
1364
         0 ignored
 
1365
         0 versioned subdirectories
 
1366
 
 
1367
Branch history:
 
1368
         0 revisions
 
1369
 
 
1370
Repository:
 
1371
         0 revisions
 
1372
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1373
       ), out)
 
1374
        self.assertEqual('', err)
 
1375
        # L L L
 
1376
        tree.lock_write()
 
1377
        out, err = self.run_bzr('info -v branch')
 
1378
        self.assertEqualDiff(
 
1379
"""Standalone tree (format: weave)
 
1380
Location:
 
1381
  branch root: %s
 
1382
 
 
1383
Format:
 
1384
       control: All-in-one format 6
 
1385
  working tree: Working tree format 2
 
1386
        branch: Branch format 4
 
1387
    repository: %s
 
1388
 
 
1389
In the working tree:
 
1390
         0 unchanged
 
1391
         0 modified
 
1392
         0 added
 
1393
         0 removed
 
1394
         0 renamed
 
1395
         0 unknown
 
1396
         0 ignored
 
1397
         0 versioned subdirectories
 
1398
 
 
1399
Branch history:
 
1400
         0 revisions
 
1401
 
 
1402
Repository:
 
1403
         0 revisions
 
1404
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1405
       ), out)
 
1406
        self.assertEqual('', err)
 
1407
        tree.unlock()
 
1408
 
1469
1409
    def test_info_stacked(self):
1470
1410
        # We have a mainline
1471
1411
        trunk_tree = self.make_branch_and_tree('mainline',
1484
1424
     stacked on: mainline
1485
1425
""", out)
1486
1426
        self.assertEqual("", err)
1487
 
 
1488
 
    def test_info_revinfo_optional(self):
1489
 
        tree = self.make_branch_and_tree('.')
1490
 
        def last_revision_info(self):
1491
 
            raise errors.UnsupportedOperation(last_revision_info, self)
1492
 
        self.overrideAttr(
1493
 
            branch.Branch, "last_revision_info", last_revision_info)
1494
 
        out, err = self.run_bzr('info -v .')
1495
 
        self.assertEqual(
1496
 
"""Standalone tree (format: 2a)
1497
 
Location:
1498
 
  branch root: .
1499
 
 
1500
 
Format:
1501
 
       control: Meta directory format 1
1502
 
  working tree: Working tree format 6
1503
 
        branch: Branch format 7
1504
 
    repository: Repository format 2a - rich roots, group compression and chk inventories
1505
 
 
1506
 
Control directory:
1507
 
         1 branches
1508
 
 
1509
 
In the working tree:
1510
 
         0 unchanged
1511
 
         0 modified
1512
 
         0 added
1513
 
         0 removed
1514
 
         0 renamed
1515
 
         0 unknown
1516
 
         0 ignored
1517
 
         0 versioned subdirectories
1518
 
""", out)
1519
 
        self.assertEqual("", err)
1520
 
 
1521
 
    def test_info_shows_colocated_branches(self):
1522
 
        bzrdir = self.make_branch('.', format='development-colo').bzrdir
1523
 
        bzrdir.create_branch(name="colo1")
1524
 
        bzrdir.create_branch(name="colo2")
1525
 
        bzrdir.create_branch(name="colo3")
1526
 
        out, err = self.run_bzr('info -v .')
1527
 
        self.assertEqualDiff(
1528
 
"""Standalone branch (format: development-colo)
1529
 
Location:
1530
 
  branch root: .
1531
 
 
1532
 
Format:
1533
 
       control: Meta directory format 1 with support for colocated branches
1534
 
        branch: Branch format 7
1535
 
    repository: Repository format 2a - rich roots, group compression and chk inventories
1536
 
 
1537
 
Control directory:
1538
 
         4 branches
1539
 
 
1540
 
Branch history:
1541
 
         0 revisions
1542
 
 
1543
 
Repository:
1544
 
         0 revisions
1545
 
""", out)
1546
 
        self.assertEqual("", err)
1547
 
 
1548
 
 
1549
 
class TestSmartServerInfo(tests.TestCaseWithTransport):
1550
 
 
1551
 
    def test_simple_branch_info(self):
1552
 
        self.setup_smart_server_with_call_log()
1553
 
        t = self.make_branch_and_tree('branch')
1554
 
        self.build_tree_contents([('branch/foo', 'thecontents')])
1555
 
        t.add("foo")
1556
 
        t.commit("message")
1557
 
        self.reset_smart_call_log()
1558
 
        out, err = self.run_bzr(['info', self.get_url('branch')])
1559
 
        # This figure represent the amount of work to perform this use case. It
1560
 
        # is entirely ok to reduce this number if a test fails due to rpc_count
1561
 
        # being too low. If rpc_count increases, more network roundtrips have
1562
 
        # become necessary for this use case. Please do not adjust this number
1563
 
        # upwards without agreement from bzr's network support maintainers.
1564
 
        self.assertLength(10, self.hpss_calls)
1565
 
        self.assertLength(1, self.hpss_connections)
1566
 
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)
1567
 
 
1568
 
    def test_verbose_branch_info(self):
1569
 
        self.setup_smart_server_with_call_log()
1570
 
        t = self.make_branch_and_tree('branch')
1571
 
        self.build_tree_contents([('branch/foo', 'thecontents')])
1572
 
        t.add("foo")
1573
 
        t.commit("message")
1574
 
        self.reset_smart_call_log()
1575
 
        out, err = self.run_bzr(['info', '-v', self.get_url('branch')])
1576
 
        # This figure represent the amount of work to perform this use case. It
1577
 
        # is entirely ok to reduce this number if a test fails due to rpc_count
1578
 
        # being too low. If rpc_count increases, more network roundtrips have
1579
 
        # become necessary for this use case. Please do not adjust this number
1580
 
        # upwards without agreement from bzr's network support maintainers.
1581
 
        self.assertLength(14, self.hpss_calls)
1582
 
        self.assertLength(1, self.hpss_connections)
1583
 
        self.assertThat(self.hpss_calls, ContainsNoVfsCalls)