~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Aaron Bentley
  • Date: 2008-11-23 16:38:39 UTC
  • mto: This revision was merged to the branch mainline in revision 3892.
  • Revision ID: aaron@aaronbentley.com-20081123163839-ew27m17130fz85v6
Update documentation

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2012, 2016 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
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):
39
 
 
40
 
    def setUp(self):
41
 
        super(TestInfo, self).setUp()
42
 
        self._repo_strings = "2a"
 
31
from bzrlib.osutils import format_date
 
32
from bzrlib.tests import TestSkipped
 
33
from bzrlib.tests.blackbox import ExternalBase
 
34
 
 
35
 
 
36
class TestInfo(ExternalBase):
43
37
 
44
38
    def test_info_non_existing(self):
45
 
        self.vfs_transport_factory = memory.MemoryServer
46
 
        location = self.get_url()
 
39
        if sys.platform == "win32":
 
40
            location = "C:/i/do/not/exist/"
 
41
        else:
 
42
            location = "/i/do/not/exist/"
47
43
        out, err = self.run_bzr('info '+location, retcode=3)
48
44
        self.assertEqual(out, '')
49
45
        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
50
46
 
51
 
    def test_info_empty_controldir(self):
52
 
        self.make_bzrdir('ctrl')
53
 
        out, err = self.run_bzr('info ctrl')
54
 
        self.assertEqual(out,
55
 
            'Empty control directory (format: 2a or pack-0.92)\n'
56
 
            'Location:\n'
57
 
            '  control directory: ctrl\n')
58
 
        self.assertEqual(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.assertEqual(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.assertEqual(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.assertEqual(err, '')
84
 
 
85
47
    def test_info_standalone(self):
86
48
        transport = self.get_transport()
87
49
 
88
50
        # Create initial standalone branch
89
 
        tree1 = self.make_branch_and_tree('standalone', 'knit')
 
51
        tree1 = self.make_branch_and_tree('standalone', 'weave')
90
52
        self.build_tree(['standalone/a'])
91
53
        tree1.add('a')
92
54
        branch1 = tree1.branch
93
55
 
94
56
        out, err = self.run_bzr('info standalone')
95
57
        self.assertEqualDiff(
96
 
"""Standalone tree (format: knit)
 
58
"""Standalone tree (format: weave)
97
59
Location:
98
60
  branch root: standalone
99
61
""", out)
100
62
        self.assertEqual('', err)
101
63
 
102
 
        # Standalone branch - verbose mode
103
64
        out, err = self.run_bzr('info standalone -v')
104
65
        self.assertEqualDiff(
105
 
"""Standalone tree (format: knit)
106
 
Location:
107
 
  branch root: standalone
108
 
 
109
 
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
117
 
 
118
 
In the working tree:
119
 
         0 unchanged
120
 
         0 modified
121
 
         1 added
122
 
         0 removed
123
 
         0 renamed
124
 
         0 unknown
125
 
         0 ignored
126
 
         0 versioned subdirectories
127
 
 
128
 
Branch history:
129
 
         0 revisions
130
 
 
131
 
Repository:
132
 
         0 revisions
133
 
""", out)
134
 
        self.assertEqual('', err)
135
 
 
136
 
        # Standalone branch - really verbose mode
137
 
        out, err = self.run_bzr('info standalone -vv')
138
 
        self.assertEqualDiff(
139
 
"""Standalone tree (format: knit)
140
 
Location:
141
 
  branch root: standalone
142
 
 
143
 
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
 
66
"""Standalone tree (format: weave)
 
67
Location:
 
68
  branch root: standalone
 
69
 
 
70
Format:
 
71
       control: All-in-one format 6
 
72
  working tree: Working tree format 2
 
73
        branch: Branch format 4
 
74
    repository: Weave repository format 6
151
75
 
152
76
In the working tree:
153
77
         0 unchanged
168
92
""", out)
169
93
        self.assertEqual('', err)
170
94
        tree1.commit('commit one')
171
 
        rev = branch1.repository.get_revision(branch1.last_revision())
172
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
95
        rev = branch1.repository.get_revision(branch1.revision_history()[0])
 
96
        datestring_first = format_date(rev.timestamp, rev.timezone)
173
97
 
174
98
        # Branch standalone with push location
175
99
        branch2 = branch1.bzrdir.sprout('branch').open_branch()
177
101
 
178
102
        out, err = self.run_bzr('info branch')
179
103
        self.assertEqualDiff(
180
 
"""Standalone tree (format: knit)
 
104
"""Standalone tree (format: weave)
181
105
Location:
182
106
  branch root: branch
183
107
 
189
113
 
190
114
        out, err = self.run_bzr('info branch --verbose')
191
115
        self.assertEqualDiff(
192
 
"""Standalone tree (format: knit)
 
116
"""Standalone tree (format: weave)
193
117
Location:
194
118
  branch root: branch
195
119
 
198
122
  parent branch: standalone
199
123
 
200
124
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
 
125
       control: All-in-one format 6
 
126
  working tree: Working tree format 2
 
127
        branch: Branch format 4
 
128
    repository: Weave repository format 6
208
129
 
209
130
In the working tree:
210
131
         1 unchanged
218
139
 
219
140
Branch history:
220
141
         1 revision
 
142
         1 committer
221
143
         0 days old
222
144
   first revision: %s
223
145
  latest revision: %s
231
153
        # Branch and bind to standalone, needs upgrade to metadir
232
154
        # (creates backup as unknown)
233
155
        branch1.bzrdir.sprout('bound')
234
 
        knit1_format = controldir.format_registry.make_bzrdir('knit')
 
156
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
235
157
        upgrade.upgrade('bound', knit1_format)
236
 
        branch3 = controldir.ControlDir.open('bound').open_branch()
 
158
        branch3 = bzrdir.BzrDir.open('bound').open_branch()
237
159
        branch3.bind(branch1)
238
160
        bound_tree = branch3.bzrdir.open_workingtree()
239
161
        out, err = self.run_bzr('info -v bound')
252
174
        branch: %s
253
175
    repository: %s
254
176
 
255
 
Control directory:
256
 
         1 branches
257
 
 
258
177
In the working tree:
259
178
         1 unchanged
260
179
         0 modified
261
180
         0 added
262
181
         0 removed
263
182
         0 renamed
264
 
         0 unknown
 
183
         1 unknown
265
184
         0 ignored
266
185
         0 versioned subdirectories
267
186
 
268
187
Branch history:
269
188
         1 revision
 
189
         1 committer
270
190
         0 days old
271
191
   first revision: %s
272
192
  latest revision: %s
281
201
        self.assertEqual('', err)
282
202
 
283
203
        # Checkout standalone (same as above, but does not have parent set)
284
 
        branch4 = controldir.ControlDir.create_branch_convenience('checkout',
 
204
        branch4 = bzrdir.BzrDir.create_branch_convenience('checkout',
285
205
            format=knit1_format)
286
206
        branch4.bind(branch1)
287
207
        branch4.bzrdir.open_workingtree().update()
298
218
        branch: Branch format 5
299
219
    repository: %s
300
220
 
301
 
Control directory:
302
 
         1 branches
303
 
 
304
221
In the working tree:
305
222
         1 unchanged
306
223
         0 modified
313
230
 
314
231
Branch history:
315
232
         1 revision
 
233
         1 committer
316
234
         0 days old
317
235
   first revision: %s
318
236
  latest revision: %s
328
246
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
329
247
        branch5 = tree5.branch
330
248
        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
249
        self.assertEqualDiff(
336
 
"""Lightweight checkout (format: %s)
 
250
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root \
 
251
or 1.9 or 1.9-rich-root \
 
252
or dirstate or dirstate-tags or \
 
253
pack-0.92 or rich-root or rich-root-pack)
337
254
Location:
338
255
  light checkout root: lightcheckout
339
256
   checkout of branch: standalone
340
257
 
341
258
Format:
342
259
       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
 
260
  working tree: Working tree format 4
 
261
        branch: Branch format 4
 
262
    repository: Weave repository format 6
349
263
 
350
264
In the working tree:
351
265
         1 unchanged
359
273
 
360
274
Branch history:
361
275
         1 revision
 
276
         1 committer
362
277
         0 days old
363
278
   first revision: %s
364
279
  latest revision: %s
365
280
 
366
281
Repository:
367
282
         1 revision
368
 
""" % (format_description, datestring_first, datestring_first,), out)
 
283
""" % (datestring_first, datestring_first,), out)
369
284
        self.assertEqual('', err)
370
285
 
371
286
        # Update initial standalone branch
372
287
        self.build_tree(['standalone/b'])
373
288
        tree1.add('b')
374
289
        tree1.commit('commit two')
375
 
        rev = branch1.repository.get_revision(branch1.last_revision())
376
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
290
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
 
291
        datestring_last = format_date(rev.timestamp, rev.timezone)
377
292
 
378
293
        # Out of date branched standalone branch will not be detected
379
294
        out, err = self.run_bzr('info -v branch')
380
295
        self.assertEqualDiff(
381
 
"""Standalone tree (format: knit)
 
296
"""Standalone tree (format: weave)
382
297
Location:
383
298
  branch root: branch
384
299
 
387
302
  parent branch: standalone
388
303
 
389
304
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
 
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
397
309
 
398
310
In the working tree:
399
311
         1 unchanged
407
319
 
408
320
Branch history:
409
321
         1 revision
 
322
         1 committer
410
323
         0 days old
411
324
   first revision: %s
412
325
  latest revision: %s
434
347
        branch: Branch format 5
435
348
    repository: %s
436
349
 
437
 
Control directory:
438
 
         1 branches
439
 
 
440
350
Branch is out of date: missing 1 revision.
441
351
 
442
352
In the working tree:
445
355
         0 added
446
356
         0 removed
447
357
         0 renamed
448
 
         0 unknown
 
358
         1 unknown
449
359
         0 ignored
450
360
         0 versioned subdirectories
451
361
 
452
362
Branch history:
453
363
         1 revision
 
364
         1 committer
454
365
         0 days old
455
366
   first revision: %s
456
367
  latest revision: %s
476
387
        branch: Branch format 5
477
388
    repository: %s
478
389
 
479
 
Control directory:
480
 
         1 branches
481
 
 
482
390
Branch is out of date: missing 1 revision.
483
391
 
484
392
In the working tree:
493
401
 
494
402
Branch history:
495
403
         1 revision
 
404
         1 committer
496
405
         0 days old
497
406
   first revision: %s
498
407
  latest revision: %s
507
416
        # Out of date lightweight checkout
508
417
        out, err = self.run_bzr('info lightcheckout --verbose')
509
418
        self.assertEqualDiff(
510
 
"""Lightweight checkout (format: %s)
 
419
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
420
1.9 or 1.9-rich-root or \
 
421
dirstate or dirstate-tags or \
 
422
pack-0.92 or rich-root or rich-root-pack)
511
423
Location:
512
424
  light checkout root: lightcheckout
513
425
   checkout of branch: standalone
514
426
 
515
427
Format:
516
428
       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
 
429
  working tree: Working tree format 4
 
430
        branch: Branch format 4
 
431
    repository: Weave repository format 6
523
432
 
524
433
Working tree is out of date: missing 1 revision.
525
434
 
535
444
 
536
445
Branch history:
537
446
         2 revisions
 
447
         1 committer
538
448
         0 days old
539
449
   first revision: %s
540
450
  latest revision: %s
541
451
 
542
452
Repository:
543
453
         2 revisions
544
 
""" % (format_description, datestring_first, datestring_last,), out)
 
454
""" % (datestring_first, datestring_last,), out)
545
455
        self.assertEqual('', err)
546
456
 
547
457
    def test_info_standalone_no_tree(self):
548
458
        # create standalone branch without a working tree
549
 
        format = controldir.format_registry.make_bzrdir('default')
 
459
        format = bzrdir.format_registry.make_bzrdir('default')
550
460
        branch = self.make_branch('branch')
551
461
        repo = branch.repository
552
462
        out, err = self.run_bzr('info branch -v')
560
470
        branch: %s
561
471
    repository: %s
562
472
 
563
 
Control directory:
564
 
         1 branches
565
 
 
566
473
Branch history:
567
474
         0 revisions
 
475
         0 committers
568
476
 
569
477
Repository:
570
478
         0 revisions
575
483
        self.assertEqual('', err)
576
484
 
577
485
    def test_info_shared_repository(self):
578
 
        format = controldir.format_registry.make_bzrdir('knit')
 
486
        format = bzrdir.format_registry.make_bzrdir('knit')
579
487
        transport = self.get_transport()
580
488
 
581
489
        # Create shared repository
591
499
       control: Meta directory format 1
592
500
    repository: %s
593
501
 
594
 
Control directory:
595
 
         0 branches
596
 
 
597
502
Repository:
598
503
         0 revisions
599
504
""" % ('repo', format.repository_format.get_format_description(),
602
507
 
603
508
        # Create branch inside shared repository
604
509
        repo.bzrdir.root_transport.mkdir('branch')
605
 
        branch1 = controldir.ControlDir.create_branch_convenience(
606
 
            'repo/branch', format=format)
 
510
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
 
511
            format=format)
607
512
        out, err = self.run_bzr('info -v repo/branch')
608
513
        self.assertEqualDiff(
609
514
"""Repository branch (format: dirstate or knit)
616
521
        branch: %s
617
522
    repository: %s
618
523
 
619
 
Control directory:
620
 
         1 branches
621
 
 
622
524
Branch history:
623
525
         0 revisions
 
526
         0 committers
624
527
 
625
528
Repository:
626
529
         0 revisions
632
535
        # Create lightweight checkout
633
536
        transport.mkdir('tree')
634
537
        transport.mkdir('tree/lightcheckout')
635
 
        tree2 = branch1.create_checkout('tree/lightcheckout',
 
538
        tree2 = branch1.create_checkout('tree/lightcheckout', 
636
539
            lightweight=True)
637
540
        branch2 = tree2.branch
638
541
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
647
550
        self.build_tree(['tree/lightcheckout/a'])
648
551
        tree2.add('a')
649
552
        tree2.commit('commit one')
650
 
        rev = repo.get_revision(branch2.last_revision())
651
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
553
        rev = repo.get_revision(branch2.revision_history()[0])
 
554
        datestring_first = format_date(rev.timestamp, rev.timezone)
652
555
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
653
556
        self.assertEqualDiff(
654
 
"""Lightweight checkout (format: %s)
 
557
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
558
1.9 or 1.9-rich-root or \
 
559
dirstate or dirstate-tags or \
 
560
pack-0.92 or rich-root or rich-root-pack)
655
561
Location:
656
562
  light checkout root: tree/lightcheckout
657
563
   checkout of branch: repo/branch
659
565
 
660
566
Format:
661
567
       control: Meta directory format 1
662
 
  working tree: Working tree format 6
 
568
  working tree: Working tree format 4
663
569
        branch: %s
664
570
    repository: %s
665
571
 
666
 
Control directory:
667
 
         1 branches
668
 
 
669
572
In the working tree:
670
573
         1 unchanged
671
574
         0 modified
678
581
 
679
582
Branch history:
680
583
         1 revision
 
584
         1 committer
681
585
         0 days old
682
586
   first revision: %s
683
587
  latest revision: %s
684
588
 
685
589
Repository:
686
590
         1 revision
687
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
591
""" % (format.get_branch_format().get_format_description(),
688
592
       format.repository_format.get_format_description(),
689
593
       datestring_first, datestring_first,
690
594
       ), out)
693
597
        # Out of date checkout
694
598
        out, err = self.run_bzr('info -v tree/checkout')
695
599
        self.assertEqualDiff(
696
 
"""Checkout (format: unnamed)
 
600
"""Checkout (format: dirstate)
697
601
Location:
698
602
       checkout root: tree/checkout
699
603
  checkout of branch: repo/branch
700
604
 
701
605
Format:
702
606
       control: Meta directory format 1
703
 
  working tree: Working tree format 6
 
607
  working tree: Working tree format 4
704
608
        branch: %s
705
609
    repository: %s
706
610
 
707
 
Control directory:
708
 
         1 branches
709
 
 
710
611
Branch is out of date: missing 1 revision.
711
612
 
712
613
In the working tree:
721
622
 
722
623
Branch history:
723
624
         0 revisions
 
625
         0 committers
724
626
 
725
627
Repository:
726
628
         0 revisions
735
637
        tree3.add('b')
736
638
        out, err = self.run_bzr('info tree/checkout --verbose')
737
639
        self.assertEqualDiff(
738
 
"""Checkout (format: unnamed)
 
640
"""Checkout (format: dirstate)
739
641
Location:
740
642
       checkout root: tree/checkout
741
643
  checkout of branch: repo/branch
742
644
 
743
645
Format:
744
646
       control: Meta directory format 1
745
 
  working tree: Working tree format 6
 
647
  working tree: Working tree format 4
746
648
        branch: %s
747
649
    repository: %s
748
650
 
749
 
Control directory:
750
 
         1 branches
751
 
 
752
651
In the working tree:
753
652
         1 unchanged
754
653
         0 modified
761
660
 
762
661
Branch history:
763
662
         1 revision
 
663
         1 committer
764
664
         0 days old
765
665
   first revision: %s
766
666
  latest revision: %s
775
675
        tree3.commit('commit two')
776
676
 
777
677
        # Out of date lightweight checkout
778
 
        rev = repo.get_revision(branch1.last_revision())
779
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
678
        rev = repo.get_revision(branch1.revision_history()[-1])
 
679
        datestring_last = format_date(rev.timestamp, rev.timezone)
780
680
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
781
681
        self.assertEqualDiff(
782
 
"""Lightweight checkout (format: %s)
 
682
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
683
1.9 or 1.9-rich-root or \
 
684
dirstate or dirstate-tags or \
 
685
pack-0.92 or rich-root or rich-root-pack)
783
686
Location:
784
687
  light checkout root: tree/lightcheckout
785
688
   checkout of branch: repo/branch
787
690
 
788
691
Format:
789
692
       control: Meta directory format 1
790
 
  working tree: Working tree format 6
 
693
  working tree: Working tree format 4
791
694
        branch: %s
792
695
    repository: %s
793
696
 
794
 
Control directory:
795
 
         1 branches
796
 
 
797
697
Working tree is out of date: missing 1 revision.
798
698
 
799
699
In the working tree:
808
708
 
809
709
Branch history:
810
710
         2 revisions
 
711
         1 committer
811
712
         0 days old
812
713
   first revision: %s
813
714
  latest revision: %s
814
715
 
815
716
Repository:
816
717
         2 revisions
817
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
718
""" % (format.get_branch_format().get_format_description(),
818
719
       format.repository_format.get_format_description(),
819
720
       datestring_first, datestring_last,
820
721
       ), out)
833
734
        branch: %s
834
735
    repository: %s
835
736
 
836
 
Control directory:
837
 
         1 branches
838
 
 
839
737
Branch history:
840
738
         2 revisions
 
739
         1 committer
841
740
         0 days old
842
741
   first revision: %s
843
742
  latest revision: %s
861
760
       control: Meta directory format 1
862
761
    repository: %s
863
762
 
864
 
Control directory:
865
 
         0 branches
866
 
 
867
763
Repository:
868
764
         2 revisions
869
765
""" % (format.repository_format.get_format_description(),
871
767
        self.assertEqual('', err)
872
768
 
873
769
    def test_info_shared_repository_with_trees(self):
874
 
        format = controldir.format_registry.make_bzrdir('knit')
 
770
        format = bzrdir.format_registry.make_bzrdir('knit')
875
771
        transport = self.get_transport()
876
772
 
877
773
        # Create shared repository with working trees
887
783
       control: Meta directory format 1
888
784
    repository: %s
889
785
 
890
 
Control directory:
891
 
         0 branches
892
 
 
893
786
Create working tree for new branches inside the repository.
894
787
 
895
788
Repository:
900
793
 
901
794
        # Create two branches
902
795
        repo.bzrdir.root_transport.mkdir('branch1')
903
 
        branch1 = controldir.ControlDir.create_branch_convenience('repo/branch1',
 
796
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
904
797
            format=format)
905
798
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
906
799
 
918
811
        branch: %s
919
812
    repository: %s
920
813
 
921
 
Control directory:
922
 
         1 branches
923
 
 
924
814
In the working tree:
925
815
         0 unchanged
926
816
         0 modified
933
823
 
934
824
Branch history:
935
825
         0 revisions
 
826
         0 committers
936
827
 
937
828
Repository:
938
829
         0 revisions
946
837
        tree1 = branch1.bzrdir.open_workingtree()
947
838
        tree1.add('a')
948
839
        tree1.commit('commit one')
949
 
        rev = repo.get_revision(branch1.last_revision())
950
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
840
        rev = repo.get_revision(branch1.revision_history()[0])
 
841
        datestring_first = format_date(rev.timestamp, rev.timezone)
951
842
        out, err = self.run_bzr('info -v repo/branch1')
952
843
        self.assertEqualDiff(
953
844
"""Repository tree (format: knit)
961
852
        branch: %s
962
853
    repository: %s
963
854
 
964
 
Control directory:
965
 
         1 branches
966
 
 
967
855
In the working tree:
968
856
         1 unchanged
969
857
         0 modified
976
864
 
977
865
Branch history:
978
866
         1 revision
 
867
         1 committer
979
868
         0 days old
980
869
   first revision: %s
981
870
  latest revision: %s
1005
894
        branch: %s
1006
895
    repository: %s
1007
896
 
1008
 
Control directory:
1009
 
         1 branches
1010
 
 
1011
897
In the working tree:
1012
898
         0 unchanged
1013
899
         0 modified
1020
906
 
1021
907
Branch history:
1022
908
         0 revisions
 
909
         0 committers
1023
910
 
1024
911
Repository:
1025
912
         1 revision
1047
934
        branch: %s
1048
935
    repository: %s
1049
936
 
1050
 
Control directory:
1051
 
         1 branches
1052
 
 
1053
937
In the working tree:
1054
938
         1 unchanged
1055
939
         0 modified
1062
946
 
1063
947
Branch history:
1064
948
         1 revision
 
949
         1 committer
1065
950
         0 days old
1066
951
   first revision: %s
1067
952
  latest revision: %s
1085
970
       control: Meta directory format 1
1086
971
    repository: %s
1087
972
 
1088
 
Control directory:
1089
 
         0 branches
1090
 
 
1091
973
Create working tree for new branches inside the repository.
1092
974
 
1093
975
Repository:
1096
978
       ),
1097
979
       out)
1098
980
        self.assertEqual('', err)
1099
 
 
 
981
    
1100
982
    def test_info_shared_repository_with_tree_in_root(self):
1101
 
        format = controldir.format_registry.make_bzrdir('knit')
 
983
        format = bzrdir.format_registry.make_bzrdir('knit')
1102
984
        transport = self.get_transport()
1103
985
 
1104
986
        # Create shared repository with working trees
1114
996
       control: Meta directory format 1
1115
997
    repository: %s
1116
998
 
1117
 
Control directory:
1118
 
         0 branches
1119
 
 
1120
999
Create working tree for new branches inside the repository.
1121
1000
 
1122
1001
Repository:
1142
1021
        branch: %s
1143
1022
    repository: %s
1144
1023
 
1145
 
Control directory:
1146
 
         1 branches
1147
 
 
1148
1024
In the working tree:
1149
1025
         0 unchanged
1150
1026
         0 modified
1157
1033
 
1158
1034
Branch history:
1159
1035
         0 revisions
 
1036
         0 committers
1160
1037
 
1161
1038
Repository:
1162
1039
         0 revisions
1165
1042
       ), out)
1166
1043
        self.assertEqual('', err)
1167
1044
 
1168
 
    def test_info_repository_hook(self):
1169
 
        format = controldir.format_registry.make_bzrdir('knit')
1170
 
        def repo_info(repo, stats, outf):
1171
 
            outf.write("more info\n")
1172
 
        info.hooks.install_named_hook('repository', repo_info, None)
1173
 
        # Create shared repository with working trees
1174
 
        repo = self.make_repository('repo', shared=True, format=format)
1175
 
        out, err = self.run_bzr('info -v repo')
1176
 
        self.assertEqualDiff(
1177
 
"""Shared repository with trees (format: dirstate or dirstate-tags or knit)
1178
 
Location:
1179
 
  shared repository: repo
1180
 
 
1181
 
Format:
1182
 
       control: Meta directory format 1
1183
 
    repository: %s
1184
 
 
1185
 
Control directory:
1186
 
         0 branches
1187
 
 
1188
 
Create working tree for new branches inside the repository.
1189
 
 
1190
 
Repository:
1191
 
         0 revisions
1192
 
more info
1193
 
""" % (format.repository_format.get_format_description(),
1194
 
       ), out)
1195
 
        self.assertEqual('', err)
1196
 
 
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
1045
    def assertCheckoutStatusOutput(self,
1214
1046
        command_string, lco_tree, shared_repo=None,
1215
1047
        repo_branch=None,
1225
1057
        allow us, the test writers, to document what *should* be present in
1226
1058
        the output. Removing this separation would remove the value of the
1227
1059
        tests.
1228
 
 
 
1060
        
1229
1061
        :param path: the path to the light checkout.
1230
1062
        :param lco_tree: the tree object for the light checkout.
1231
1063
        :param shared_repo: A shared repository is in use, expect that in
1239
1071
            actually locked then this parameter is overridden. This is because
1240
1072
            pack repositories do not have any public API for obtaining an
1241
1073
            exclusive repository wide lock.
1242
 
        :param verbose: verbosity level: 2 or higher to show committers
 
1074
        :param verbose: If true, expect verbose output
1243
1075
        """
1244
1076
        def friendly_location(url):
1245
1077
            path = urlutils.unescape_for_display(url, 'ascii')
1264
1096
            (False, True): 'Lightweight checkout',
1265
1097
            (False, False): 'Checkout',
1266
1098
            }[(shared_repo is not None, light_checkout)]
1267
 
        format = {True: self._repo_strings,
1268
 
                  False: 'unnamed'}[light_checkout]
 
1099
        format = {True: '1.6 or 1.6.1-rich-root'
 
1100
                        ' or 1.9 or 1.9-rich-root'
 
1101
                        ' or dirstate or dirstate-tags or pack-0.92'
 
1102
                        ' or rich-root or rich-root-pack',
 
1103
                  False: 'dirstate'}[light_checkout]
1269
1104
        if repo_locked:
1270
1105
            repo_locked = lco_tree.branch.repository.get_physical_lock_status()
1271
1106
        if repo_locked or branch_locked or tree_locked:
1308
1143
        else:
1309
1144
            branch_data = ("   checkout of branch: %s\n" %
1310
1145
                lco_tree.branch.bzrdir.root_transport.base)
1311
 
 
1312
 
        if verbose >= 2:
 
1146
        
 
1147
        if verbose:
1313
1148
            verbose_info = '         0 committers\n'
1314
1149
        else:
1315
1150
            verbose_info = ''
1316
 
 
 
1151
            
1317
1152
        self.assertEqualDiff(
1318
1153
"""%s (format: %s)
1319
1154
Location:
1324
1159
        branch: %s
1325
1160
    repository: %s
1326
1161
%s
1327
 
Control directory:
1328
 
         1 branches
1329
 
 
1330
1162
In the working tree:
1331
1163
         0 unchanged
1332
1164
         0 modified
1361
1193
                                    format=bzrdir.BzrDirMetaFormat1())
1362
1194
        repo.set_make_working_trees(False)
1363
1195
        repo.bzrdir.root_transport.mkdir('branch')
1364
 
        repo_branch = controldir.ControlDir.create_branch_convenience(
1365
 
            'repo/branch', format=bzrdir.BzrDirMetaFormat1())
 
1196
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
 
1197
                                    format=bzrdir.BzrDirMetaFormat1())
1366
1198
        # Do a heavy checkout
1367
1199
        transport.mkdir('tree')
1368
1200
        transport.mkdir('tree/checkout')
1369
 
        co_branch = controldir.ControlDir.create_branch_convenience(
1370
 
            'tree/checkout', format=bzrdir.BzrDirMetaFormat1())
 
1201
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1202
            format=bzrdir.BzrDirMetaFormat1())
1371
1203
        co_branch.bind(repo_branch)
1372
1204
        # Do a light checkout of the heavy one
1373
1205
        transport.mkdir('tree/lightcheckout')
1374
1206
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1375
 
        lco_dir.set_branch_reference(co_branch)
 
1207
        branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1376
1208
        lco_dir.create_workingtree()
1377
1209
        lco_tree = lco_dir.open_workingtree()
1378
1210
 
1466
1298
            self.knownFailure('Win32 cannot run "bzr info"'
1467
1299
                              ' when the tree is locked.')
1468
1300
 
 
1301
    def test_info_locking_oslocks(self):
 
1302
        if sys.platform == "win32":
 
1303
            raise TestSkipped("don't use oslocks on win32 in unix manner")
 
1304
 
 
1305
        tree = self.make_branch_and_tree('branch',
 
1306
                                         format=bzrdir.BzrDirFormat6())
 
1307
 
 
1308
        # Test all permutations of locking the working tree, branch and repository
 
1309
        # XXX: Well not yet, as we can't query oslocks yet. Currently, it's
 
1310
        # implemented by raising NotImplementedError and get_physical_lock_status()
 
1311
        # always returns false. This makes bzr info hide the lock status.  (Olaf)
 
1312
        # W B R
 
1313
 
 
1314
        # U U U
 
1315
        out, err = self.run_bzr('info -v branch')
 
1316
        self.assertEqualDiff(
 
1317
"""Standalone tree (format: weave)
 
1318
Location:
 
1319
  branch root: %s
 
1320
 
 
1321
Format:
 
1322
       control: All-in-one format 6
 
1323
  working tree: Working tree format 2
 
1324
        branch: Branch format 4
 
1325
    repository: %s
 
1326
 
 
1327
In the working tree:
 
1328
         0 unchanged
 
1329
         0 modified
 
1330
         0 added
 
1331
         0 removed
 
1332
         0 renamed
 
1333
         0 unknown
 
1334
         0 ignored
 
1335
         0 versioned subdirectories
 
1336
 
 
1337
Branch history:
 
1338
         0 revisions
 
1339
         0 committers
 
1340
 
 
1341
Repository:
 
1342
         0 revisions
 
1343
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1344
       ), out)
 
1345
        self.assertEqual('', err)
 
1346
        # L L L
 
1347
        tree.lock_write()
 
1348
        out, err = self.run_bzr('info -v branch')
 
1349
        self.assertEqualDiff(
 
1350
"""Standalone tree (format: weave)
 
1351
Location:
 
1352
  branch root: %s
 
1353
 
 
1354
Format:
 
1355
       control: All-in-one format 6
 
1356
  working tree: Working tree format 2
 
1357
        branch: Branch format 4
 
1358
    repository: %s
 
1359
 
 
1360
In the working tree:
 
1361
         0 unchanged
 
1362
         0 modified
 
1363
         0 added
 
1364
         0 removed
 
1365
         0 renamed
 
1366
         0 unknown
 
1367
         0 ignored
 
1368
         0 versioned subdirectories
 
1369
 
 
1370
Branch history:
 
1371
         0 revisions
 
1372
         0 committers
 
1373
 
 
1374
Repository:
 
1375
         0 revisions
 
1376
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1377
       ), out)
 
1378
        self.assertEqual('', err)
 
1379
        tree.unlock()
 
1380
 
1469
1381
    def test_info_stacked(self):
1470
1382
        # We have a mainline
1471
1383
        trunk_tree = self.make_branch_and_tree('mainline',
1484
1396
     stacked on: mainline
1485
1397
""", out)
1486
1398
        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)