~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-06-30 18:28:17 UTC
  • mfrom: (5967.10.2 test-cat)
  • Revision ID: pqm@pqm.ubuntu.com-20110630182817-83a5q9r9rxfkdn8r
(mbp) don't use subprocesses for testing cat (Martin Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2012 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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,
31
29
    upgrade,
32
30
    urlutils,
33
31
    )
34
 
from bzrlib.tests.matchers import ContainsNoVfsCalls
35
32
from bzrlib.transport import memory
36
33
 
37
34
 
48
45
        self.assertEqual(out, '')
49
46
        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
50
47
 
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
48
    def test_info_standalone(self):
86
49
        transport = self.get_transport()
87
50
 
112
75
        branch: Branch format 5
113
76
    repository: Knit repository format 1
114
77
 
115
 
Control directory:
116
 
         1 branches
117
 
 
118
78
In the working tree:
119
79
         0 unchanged
120
80
         0 modified
146
106
        branch: Branch format 5
147
107
    repository: Knit repository format 1
148
108
 
149
 
Control directory:
150
 
         1 branches
151
 
 
152
109
In the working tree:
153
110
         0 unchanged
154
111
         0 modified
168
125
""", out)
169
126
        self.assertEqual('', err)
170
127
        tree1.commit('commit one')
171
 
        rev = branch1.repository.get_revision(branch1.last_revision())
 
128
        rev = branch1.repository.get_revision(branch1.revision_history()[0])
172
129
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
173
130
 
174
131
        # Branch standalone with push location
203
160
        branch: Branch format 5
204
161
    repository: Knit repository format 1
205
162
 
206
 
Control directory:
207
 
         1 branches
208
 
 
209
163
In the working tree:
210
164
         1 unchanged
211
165
         0 modified
231
185
        # Branch and bind to standalone, needs upgrade to metadir
232
186
        # (creates backup as unknown)
233
187
        branch1.bzrdir.sprout('bound')
234
 
        knit1_format = controldir.format_registry.make_bzrdir('knit')
 
188
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
235
189
        upgrade.upgrade('bound', knit1_format)
236
 
        branch3 = controldir.ControlDir.open('bound').open_branch()
 
190
        branch3 = bzrdir.BzrDir.open('bound').open_branch()
237
191
        branch3.bind(branch1)
238
192
        bound_tree = branch3.bzrdir.open_workingtree()
239
193
        out, err = self.run_bzr('info -v bound')
252
206
        branch: %s
253
207
    repository: %s
254
208
 
255
 
Control directory:
256
 
         1 branches
257
 
 
258
209
In the working tree:
259
210
         1 unchanged
260
211
         0 modified
281
232
        self.assertEqual('', err)
282
233
 
283
234
        # Checkout standalone (same as above, but does not have parent set)
284
 
        branch4 = controldir.ControlDir.create_branch_convenience('checkout',
 
235
        branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
285
236
            format=knit1_format)
286
237
        branch4.bind(branch1)
287
238
        branch4.bzrdir.open_workingtree().update()
298
249
        branch: Branch format 5
299
250
    repository: %s
300
251
 
301
 
Control directory:
302
 
         1 branches
303
 
 
304
252
In the working tree:
305
253
         1 unchanged
306
254
         0 modified
328
276
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
329
277
        branch5 = tree5.branch
330
278
        out, err = self.run_bzr('info -v lightcheckout')
331
 
        if "metaweave" in controldir.format_registry:
 
279
        if "metaweave" in bzrdir.format_registry:
332
280
            format_description = "knit or metaweave"
333
281
        else:
334
282
            format_description = "knit"
344
292
        branch: Branch format 5
345
293
    repository: Knit repository format 1
346
294
 
347
 
Control directory:
348
 
         1 branches
349
 
 
350
295
In the working tree:
351
296
         1 unchanged
352
297
         0 modified
372
317
        self.build_tree(['standalone/b'])
373
318
        tree1.add('b')
374
319
        tree1.commit('commit two')
375
 
        rev = branch1.repository.get_revision(branch1.last_revision())
 
320
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
376
321
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
377
322
 
378
323
        # Out of date branched standalone branch will not be detected
392
337
        branch: Branch format 5
393
338
    repository: Knit repository format 1
394
339
 
395
 
Control directory:
396
 
         1 branches
397
 
 
398
340
In the working tree:
399
341
         1 unchanged
400
342
         0 modified
434
376
        branch: Branch format 5
435
377
    repository: %s
436
378
 
437
 
Control directory:
438
 
         1 branches
439
 
 
440
379
Branch is out of date: missing 1 revision.
441
380
 
442
381
In the working tree:
476
415
        branch: Branch format 5
477
416
    repository: %s
478
417
 
479
 
Control directory:
480
 
         1 branches
481
 
 
482
418
Branch is out of date: missing 1 revision.
483
419
 
484
420
In the working tree:
518
454
        branch: Branch format 5
519
455
    repository: Knit repository format 1
520
456
 
521
 
Control directory:
522
 
         1 branches
523
 
 
524
457
Working tree is out of date: missing 1 revision.
525
458
 
526
459
In the working tree:
546
479
 
547
480
    def test_info_standalone_no_tree(self):
548
481
        # create standalone branch without a working tree
549
 
        format = controldir.format_registry.make_bzrdir('default')
 
482
        format = bzrdir.format_registry.make_bzrdir('default')
550
483
        branch = self.make_branch('branch')
551
484
        repo = branch.repository
552
485
        out, err = self.run_bzr('info branch -v')
560
493
        branch: %s
561
494
    repository: %s
562
495
 
563
 
Control directory:
564
 
         1 branches
565
 
 
566
496
Branch history:
567
497
         0 revisions
568
498
 
575
505
        self.assertEqual('', err)
576
506
 
577
507
    def test_info_shared_repository(self):
578
 
        format = controldir.format_registry.make_bzrdir('knit')
 
508
        format = bzrdir.format_registry.make_bzrdir('knit')
579
509
        transport = self.get_transport()
580
510
 
581
511
        # Create shared repository
591
521
       control: Meta directory format 1
592
522
    repository: %s
593
523
 
594
 
Control directory:
595
 
         0 branches
596
 
 
597
524
Repository:
598
525
         0 revisions
599
526
""" % ('repo', format.repository_format.get_format_description(),
602
529
 
603
530
        # Create branch inside shared repository
604
531
        repo.bzrdir.root_transport.mkdir('branch')
605
 
        branch1 = controldir.ControlDir.create_branch_convenience(
606
 
            'repo/branch', format=format)
 
532
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
 
533
            format=format)
607
534
        out, err = self.run_bzr('info -v repo/branch')
608
535
        self.assertEqualDiff(
609
536
"""Repository branch (format: dirstate or knit)
616
543
        branch: %s
617
544
    repository: %s
618
545
 
619
 
Control directory:
620
 
         1 branches
621
 
 
622
546
Branch history:
623
547
         0 revisions
624
548
 
647
571
        self.build_tree(['tree/lightcheckout/a'])
648
572
        tree2.add('a')
649
573
        tree2.commit('commit one')
650
 
        rev = repo.get_revision(branch2.last_revision())
 
574
        rev = repo.get_revision(branch2.revision_history()[0])
651
575
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
652
576
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
653
577
        self.assertEqualDiff(
663
587
        branch: %s
664
588
    repository: %s
665
589
 
666
 
Control directory:
667
 
         1 branches
668
 
 
669
590
In the working tree:
670
591
         1 unchanged
671
592
         0 modified
704
625
        branch: %s
705
626
    repository: %s
706
627
 
707
 
Control directory:
708
 
         1 branches
709
 
 
710
628
Branch is out of date: missing 1 revision.
711
629
 
712
630
In the working tree:
746
664
        branch: %s
747
665
    repository: %s
748
666
 
749
 
Control directory:
750
 
         1 branches
751
 
 
752
667
In the working tree:
753
668
         1 unchanged
754
669
         0 modified
775
690
        tree3.commit('commit two')
776
691
 
777
692
        # Out of date lightweight checkout
778
 
        rev = repo.get_revision(branch1.last_revision())
 
693
        rev = repo.get_revision(branch1.revision_history()[-1])
779
694
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
780
695
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
781
696
        self.assertEqualDiff(
791
706
        branch: %s
792
707
    repository: %s
793
708
 
794
 
Control directory:
795
 
         1 branches
796
 
 
797
709
Working tree is out of date: missing 1 revision.
798
710
 
799
711
In the working tree:
833
745
        branch: %s
834
746
    repository: %s
835
747
 
836
 
Control directory:
837
 
         1 branches
838
 
 
839
748
Branch history:
840
749
         2 revisions
841
750
         0 days old
861
770
       control: Meta directory format 1
862
771
    repository: %s
863
772
 
864
 
Control directory:
865
 
         0 branches
866
 
 
867
773
Repository:
868
774
         2 revisions
869
775
""" % (format.repository_format.get_format_description(),
871
777
        self.assertEqual('', err)
872
778
 
873
779
    def test_info_shared_repository_with_trees(self):
874
 
        format = controldir.format_registry.make_bzrdir('knit')
 
780
        format = bzrdir.format_registry.make_bzrdir('knit')
875
781
        transport = self.get_transport()
876
782
 
877
783
        # Create shared repository with working trees
887
793
       control: Meta directory format 1
888
794
    repository: %s
889
795
 
890
 
Control directory:
891
 
         0 branches
892
 
 
893
796
Create working tree for new branches inside the repository.
894
797
 
895
798
Repository:
900
803
 
901
804
        # Create two branches
902
805
        repo.bzrdir.root_transport.mkdir('branch1')
903
 
        branch1 = controldir.ControlDir.create_branch_convenience('repo/branch1',
 
806
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
904
807
            format=format)
905
808
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
906
809
 
918
821
        branch: %s
919
822
    repository: %s
920
823
 
921
 
Control directory:
922
 
         1 branches
923
 
 
924
824
In the working tree:
925
825
         0 unchanged
926
826
         0 modified
946
846
        tree1 = branch1.bzrdir.open_workingtree()
947
847
        tree1.add('a')
948
848
        tree1.commit('commit one')
949
 
        rev = repo.get_revision(branch1.last_revision())
 
849
        rev = repo.get_revision(branch1.revision_history()[0])
950
850
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
951
851
        out, err = self.run_bzr('info -v repo/branch1')
952
852
        self.assertEqualDiff(
961
861
        branch: %s
962
862
    repository: %s
963
863
 
964
 
Control directory:
965
 
         1 branches
966
 
 
967
864
In the working tree:
968
865
         1 unchanged
969
866
         0 modified
1005
902
        branch: %s
1006
903
    repository: %s
1007
904
 
1008
 
Control directory:
1009
 
         1 branches
1010
 
 
1011
905
In the working tree:
1012
906
         0 unchanged
1013
907
         0 modified
1047
941
        branch: %s
1048
942
    repository: %s
1049
943
 
1050
 
Control directory:
1051
 
         1 branches
1052
 
 
1053
944
In the working tree:
1054
945
         1 unchanged
1055
946
         0 modified
1085
976
       control: Meta directory format 1
1086
977
    repository: %s
1087
978
 
1088
 
Control directory:
1089
 
         0 branches
1090
 
 
1091
979
Create working tree for new branches inside the repository.
1092
980
 
1093
981
Repository:
1098
986
        self.assertEqual('', err)
1099
987
 
1100
988
    def test_info_shared_repository_with_tree_in_root(self):
1101
 
        format = controldir.format_registry.make_bzrdir('knit')
 
989
        format = bzrdir.format_registry.make_bzrdir('knit')
1102
990
        transport = self.get_transport()
1103
991
 
1104
992
        # Create shared repository with working trees
1114
1002
       control: Meta directory format 1
1115
1003
    repository: %s
1116
1004
 
1117
 
Control directory:
1118
 
         0 branches
1119
 
 
1120
1005
Create working tree for new branches inside the repository.
1121
1006
 
1122
1007
Repository:
1142
1027
        branch: %s
1143
1028
    repository: %s
1144
1029
 
1145
 
Control directory:
1146
 
         1 branches
1147
 
 
1148
1030
In the working tree:
1149
1031
         0 unchanged
1150
1032
         0 modified
1166
1048
        self.assertEqual('', err)
1167
1049
 
1168
1050
    def test_info_repository_hook(self):
1169
 
        format = controldir.format_registry.make_bzrdir('knit')
 
1051
        format = bzrdir.format_registry.make_bzrdir('knit')
1170
1052
        def repo_info(repo, stats, outf):
1171
1053
            outf.write("more info\n")
1172
1054
        info.hooks.install_named_hook('repository', repo_info, None)
1182
1064
       control: Meta directory format 1
1183
1065
    repository: %s
1184
1066
 
1185
 
Control directory:
1186
 
         0 branches
1187
 
 
1188
1067
Create working tree for new branches inside the repository.
1189
1068
 
1190
1069
Repository:
1194
1073
       ), out)
1195
1074
        self.assertEqual('', err)
1196
1075
 
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
1076
    def assertCheckoutStatusOutput(self,
1214
1077
        command_string, lco_tree, shared_repo=None,
1215
1078
        repo_branch=None,
1324
1187
        branch: %s
1325
1188
    repository: %s
1326
1189
%s
1327
 
Control directory:
1328
 
         1 branches
1329
 
 
1330
1190
In the working tree:
1331
1191
         0 unchanged
1332
1192
         0 modified
1361
1221
                                    format=bzrdir.BzrDirMetaFormat1())
1362
1222
        repo.set_make_working_trees(False)
1363
1223
        repo.bzrdir.root_transport.mkdir('branch')
1364
 
        repo_branch = controldir.ControlDir.create_branch_convenience(
1365
 
            'repo/branch', format=bzrdir.BzrDirMetaFormat1())
 
1224
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
 
1225
                                    format=bzrdir.BzrDirMetaFormat1())
1366
1226
        # Do a heavy checkout
1367
1227
        transport.mkdir('tree')
1368
1228
        transport.mkdir('tree/checkout')
1369
 
        co_branch = controldir.ControlDir.create_branch_convenience(
1370
 
            'tree/checkout', format=bzrdir.BzrDirMetaFormat1())
 
1229
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1230
            format=bzrdir.BzrDirMetaFormat1())
1371
1231
        co_branch.bind(repo_branch)
1372
1232
        # Do a light checkout of the heavy one
1373
1233
        transport.mkdir('tree/lightcheckout')
1374
1234
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1375
 
        lco_dir.set_branch_reference(co_branch)
 
1235
        branch.BranchReferenceFormat().initialize(lco_dir,
 
1236
            target_branch=co_branch)
1376
1237
        lco_dir.create_workingtree()
1377
1238
        lco_tree = lco_dir.open_workingtree()
1378
1239
 
1484
1345
     stacked on: mainline
1485
1346
""", out)
1486
1347
        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)