~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: 2008-09-03 22:30:56 UTC
  • mfrom: (3644.2.13 index_builder_cleanup)
  • Revision ID: pqm@pqm.ubuntu.com-20080903223056-b108iytb38xkznci
(jam) Streamline BTreeBuilder.add_node et al to make btree creation
        faster.

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 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 dirstate or dirstate-tags or \
 
252
pack-0.92 or rich-root or rich-root-pack)
337
253
Location:
338
254
  light checkout root: lightcheckout
339
255
   checkout of branch: standalone
340
256
 
341
257
Format:
342
258
       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
 
259
  working tree: Working tree format 4
 
260
        branch: Branch format 4
 
261
    repository: Weave repository format 6
349
262
 
350
263
In the working tree:
351
264
         1 unchanged
359
272
 
360
273
Branch history:
361
274
         1 revision
 
275
         1 committer
362
276
         0 days old
363
277
   first revision: %s
364
278
  latest revision: %s
365
279
 
366
280
Repository:
367
281
         1 revision
368
 
""" % (format_description, datestring_first, datestring_first,), out)
 
282
""" % (datestring_first, datestring_first,), out)
369
283
        self.assertEqual('', err)
370
284
 
371
285
        # Update initial standalone branch
372
286
        self.build_tree(['standalone/b'])
373
287
        tree1.add('b')
374
288
        tree1.commit('commit two')
375
 
        rev = branch1.repository.get_revision(branch1.last_revision())
376
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
289
        rev = branch1.repository.get_revision(branch1.revision_history()[-1])
 
290
        datestring_last = format_date(rev.timestamp, rev.timezone)
377
291
 
378
292
        # Out of date branched standalone branch will not be detected
379
293
        out, err = self.run_bzr('info -v branch')
380
294
        self.assertEqualDiff(
381
 
"""Standalone tree (format: knit)
 
295
"""Standalone tree (format: weave)
382
296
Location:
383
297
  branch root: branch
384
298
 
387
301
  parent branch: standalone
388
302
 
389
303
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
 
304
       control: All-in-one format 6
 
305
  working tree: Working tree format 2
 
306
        branch: Branch format 4
 
307
    repository: Weave repository format 6
397
308
 
398
309
In the working tree:
399
310
         1 unchanged
407
318
 
408
319
Branch history:
409
320
         1 revision
 
321
         1 committer
410
322
         0 days old
411
323
   first revision: %s
412
324
  latest revision: %s
434
346
        branch: Branch format 5
435
347
    repository: %s
436
348
 
437
 
Control directory:
438
 
         1 branches
439
 
 
440
349
Branch is out of date: missing 1 revision.
441
350
 
442
351
In the working tree:
445
354
         0 added
446
355
         0 removed
447
356
         0 renamed
448
 
         0 unknown
 
357
         1 unknown
449
358
         0 ignored
450
359
         0 versioned subdirectories
451
360
 
452
361
Branch history:
453
362
         1 revision
 
363
         1 committer
454
364
         0 days old
455
365
   first revision: %s
456
366
  latest revision: %s
476
386
        branch: Branch format 5
477
387
    repository: %s
478
388
 
479
 
Control directory:
480
 
         1 branches
481
 
 
482
389
Branch is out of date: missing 1 revision.
483
390
 
484
391
In the working tree:
493
400
 
494
401
Branch history:
495
402
         1 revision
 
403
         1 committer
496
404
         0 days old
497
405
   first revision: %s
498
406
  latest revision: %s
507
415
        # Out of date lightweight checkout
508
416
        out, err = self.run_bzr('info lightcheckout --verbose')
509
417
        self.assertEqualDiff(
510
 
"""Lightweight checkout (format: %s)
 
418
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
419
dirstate or dirstate-tags or \
 
420
pack-0.92 or rich-root or rich-root-pack)
511
421
Location:
512
422
  light checkout root: lightcheckout
513
423
   checkout of branch: standalone
514
424
 
515
425
Format:
516
426
       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
 
427
  working tree: Working tree format 4
 
428
        branch: Branch format 4
 
429
    repository: Weave repository format 6
523
430
 
524
431
Working tree is out of date: missing 1 revision.
525
432
 
535
442
 
536
443
Branch history:
537
444
         2 revisions
 
445
         1 committer
538
446
         0 days old
539
447
   first revision: %s
540
448
  latest revision: %s
541
449
 
542
450
Repository:
543
451
         2 revisions
544
 
""" % (format_description, datestring_first, datestring_last,), out)
 
452
""" % (datestring_first, datestring_last,), out)
545
453
        self.assertEqual('', err)
546
454
 
547
455
    def test_info_standalone_no_tree(self):
548
456
        # create standalone branch without a working tree
549
 
        format = controldir.format_registry.make_bzrdir('default')
 
457
        format = bzrdir.format_registry.make_bzrdir('default')
550
458
        branch = self.make_branch('branch')
551
459
        repo = branch.repository
552
460
        out, err = self.run_bzr('info branch -v')
560
468
        branch: %s
561
469
    repository: %s
562
470
 
563
 
Control directory:
564
 
         1 branches
565
 
 
566
471
Branch history:
567
472
         0 revisions
 
473
         0 committers
568
474
 
569
475
Repository:
570
476
         0 revisions
575
481
        self.assertEqual('', err)
576
482
 
577
483
    def test_info_shared_repository(self):
578
 
        format = controldir.format_registry.make_bzrdir('knit')
 
484
        format = bzrdir.format_registry.make_bzrdir('knit')
579
485
        transport = self.get_transport()
580
486
 
581
487
        # Create shared repository
591
497
       control: Meta directory format 1
592
498
    repository: %s
593
499
 
594
 
Control directory:
595
 
         0 branches
596
 
 
597
500
Repository:
598
501
         0 revisions
599
502
""" % ('repo', format.repository_format.get_format_description(),
602
505
 
603
506
        # Create branch inside shared repository
604
507
        repo.bzrdir.root_transport.mkdir('branch')
605
 
        branch1 = controldir.ControlDir.create_branch_convenience(
606
 
            'repo/branch', format=format)
 
508
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
 
509
            format=format)
607
510
        out, err = self.run_bzr('info -v repo/branch')
608
511
        self.assertEqualDiff(
609
512
"""Repository branch (format: dirstate or knit)
616
519
        branch: %s
617
520
    repository: %s
618
521
 
619
 
Control directory:
620
 
         1 branches
621
 
 
622
522
Branch history:
623
523
         0 revisions
 
524
         0 committers
624
525
 
625
526
Repository:
626
527
         0 revisions
632
533
        # Create lightweight checkout
633
534
        transport.mkdir('tree')
634
535
        transport.mkdir('tree/lightcheckout')
635
 
        tree2 = branch1.create_checkout('tree/lightcheckout',
 
536
        tree2 = branch1.create_checkout('tree/lightcheckout', 
636
537
            lightweight=True)
637
538
        branch2 = tree2.branch
638
539
        self.assertCheckoutStatusOutput('-v tree/lightcheckout', tree2,
647
548
        self.build_tree(['tree/lightcheckout/a'])
648
549
        tree2.add('a')
649
550
        tree2.commit('commit one')
650
 
        rev = repo.get_revision(branch2.last_revision())
651
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
551
        rev = repo.get_revision(branch2.revision_history()[0])
 
552
        datestring_first = format_date(rev.timestamp, rev.timezone)
652
553
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
653
554
        self.assertEqualDiff(
654
 
"""Lightweight checkout (format: %s)
 
555
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
556
dirstate or dirstate-tags or \
 
557
pack-0.92 or rich-root or rich-root-pack)
655
558
Location:
656
559
  light checkout root: tree/lightcheckout
657
560
   checkout of branch: repo/branch
659
562
 
660
563
Format:
661
564
       control: Meta directory format 1
662
 
  working tree: Working tree format 6
 
565
  working tree: Working tree format 4
663
566
        branch: %s
664
567
    repository: %s
665
568
 
666
 
Control directory:
667
 
         1 branches
668
 
 
669
569
In the working tree:
670
570
         1 unchanged
671
571
         0 modified
678
578
 
679
579
Branch history:
680
580
         1 revision
 
581
         1 committer
681
582
         0 days old
682
583
   first revision: %s
683
584
  latest revision: %s
684
585
 
685
586
Repository:
686
587
         1 revision
687
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
588
""" % (format.get_branch_format().get_format_description(),
688
589
       format.repository_format.get_format_description(),
689
590
       datestring_first, datestring_first,
690
591
       ), out)
693
594
        # Out of date checkout
694
595
        out, err = self.run_bzr('info -v tree/checkout')
695
596
        self.assertEqualDiff(
696
 
"""Checkout (format: unnamed)
 
597
"""Checkout (format: dirstate)
697
598
Location:
698
599
       checkout root: tree/checkout
699
600
  checkout of branch: repo/branch
700
601
 
701
602
Format:
702
603
       control: Meta directory format 1
703
 
  working tree: Working tree format 6
 
604
  working tree: Working tree format 4
704
605
        branch: %s
705
606
    repository: %s
706
607
 
707
 
Control directory:
708
 
         1 branches
709
 
 
710
608
Branch is out of date: missing 1 revision.
711
609
 
712
610
In the working tree:
721
619
 
722
620
Branch history:
723
621
         0 revisions
 
622
         0 committers
724
623
 
725
624
Repository:
726
625
         0 revisions
735
634
        tree3.add('b')
736
635
        out, err = self.run_bzr('info tree/checkout --verbose')
737
636
        self.assertEqualDiff(
738
 
"""Checkout (format: unnamed)
 
637
"""Checkout (format: dirstate)
739
638
Location:
740
639
       checkout root: tree/checkout
741
640
  checkout of branch: repo/branch
742
641
 
743
642
Format:
744
643
       control: Meta directory format 1
745
 
  working tree: Working tree format 6
 
644
  working tree: Working tree format 4
746
645
        branch: %s
747
646
    repository: %s
748
647
 
749
 
Control directory:
750
 
         1 branches
751
 
 
752
648
In the working tree:
753
649
         1 unchanged
754
650
         0 modified
761
657
 
762
658
Branch history:
763
659
         1 revision
 
660
         1 committer
764
661
         0 days old
765
662
   first revision: %s
766
663
  latest revision: %s
775
672
        tree3.commit('commit two')
776
673
 
777
674
        # Out of date lightweight checkout
778
 
        rev = repo.get_revision(branch1.last_revision())
779
 
        datestring_last = osutils.format_date(rev.timestamp, rev.timezone)
 
675
        rev = repo.get_revision(branch1.revision_history()[-1])
 
676
        datestring_last = format_date(rev.timestamp, rev.timezone)
780
677
        out, err = self.run_bzr('info tree/lightcheckout --verbose')
781
678
        self.assertEqualDiff(
782
 
"""Lightweight checkout (format: %s)
 
679
"""Lightweight checkout (format: 1.6 or 1.6.1-rich-root or \
 
680
dirstate or dirstate-tags or \
 
681
pack-0.92 or rich-root or rich-root-pack)
783
682
Location:
784
683
  light checkout root: tree/lightcheckout
785
684
   checkout of branch: repo/branch
787
686
 
788
687
Format:
789
688
       control: Meta directory format 1
790
 
  working tree: Working tree format 6
 
689
  working tree: Working tree format 4
791
690
        branch: %s
792
691
    repository: %s
793
692
 
794
 
Control directory:
795
 
         1 branches
796
 
 
797
693
Working tree is out of date: missing 1 revision.
798
694
 
799
695
In the working tree:
808
704
 
809
705
Branch history:
810
706
         2 revisions
 
707
         1 committer
811
708
         0 days old
812
709
   first revision: %s
813
710
  latest revision: %s
814
711
 
815
712
Repository:
816
713
         2 revisions
817
 
""" % (self._repo_strings, format.get_branch_format().get_format_description(),
 
714
""" % (format.get_branch_format().get_format_description(),
818
715
       format.repository_format.get_format_description(),
819
716
       datestring_first, datestring_last,
820
717
       ), out)
833
730
        branch: %s
834
731
    repository: %s
835
732
 
836
 
Control directory:
837
 
         1 branches
838
 
 
839
733
Branch history:
840
734
         2 revisions
 
735
         1 committer
841
736
         0 days old
842
737
   first revision: %s
843
738
  latest revision: %s
861
756
       control: Meta directory format 1
862
757
    repository: %s
863
758
 
864
 
Control directory:
865
 
         0 branches
866
 
 
867
759
Repository:
868
760
         2 revisions
869
761
""" % (format.repository_format.get_format_description(),
871
763
        self.assertEqual('', err)
872
764
 
873
765
    def test_info_shared_repository_with_trees(self):
874
 
        format = controldir.format_registry.make_bzrdir('knit')
 
766
        format = bzrdir.format_registry.make_bzrdir('knit')
875
767
        transport = self.get_transport()
876
768
 
877
769
        # Create shared repository with working trees
887
779
       control: Meta directory format 1
888
780
    repository: %s
889
781
 
890
 
Control directory:
891
 
         0 branches
892
 
 
893
782
Create working tree for new branches inside the repository.
894
783
 
895
784
Repository:
900
789
 
901
790
        # Create two branches
902
791
        repo.bzrdir.root_transport.mkdir('branch1')
903
 
        branch1 = controldir.ControlDir.create_branch_convenience('repo/branch1',
 
792
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
904
793
            format=format)
905
794
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
906
795
 
918
807
        branch: %s
919
808
    repository: %s
920
809
 
921
 
Control directory:
922
 
         1 branches
923
 
 
924
810
In the working tree:
925
811
         0 unchanged
926
812
         0 modified
933
819
 
934
820
Branch history:
935
821
         0 revisions
 
822
         0 committers
936
823
 
937
824
Repository:
938
825
         0 revisions
946
833
        tree1 = branch1.bzrdir.open_workingtree()
947
834
        tree1.add('a')
948
835
        tree1.commit('commit one')
949
 
        rev = repo.get_revision(branch1.last_revision())
950
 
        datestring_first = osutils.format_date(rev.timestamp, rev.timezone)
 
836
        rev = repo.get_revision(branch1.revision_history()[0])
 
837
        datestring_first = format_date(rev.timestamp, rev.timezone)
951
838
        out, err = self.run_bzr('info -v repo/branch1')
952
839
        self.assertEqualDiff(
953
840
"""Repository tree (format: knit)
961
848
        branch: %s
962
849
    repository: %s
963
850
 
964
 
Control directory:
965
 
         1 branches
966
 
 
967
851
In the working tree:
968
852
         1 unchanged
969
853
         0 modified
976
860
 
977
861
Branch history:
978
862
         1 revision
 
863
         1 committer
979
864
         0 days old
980
865
   first revision: %s
981
866
  latest revision: %s
1005
890
        branch: %s
1006
891
    repository: %s
1007
892
 
1008
 
Control directory:
1009
 
         1 branches
1010
 
 
1011
893
In the working tree:
1012
894
         0 unchanged
1013
895
         0 modified
1020
902
 
1021
903
Branch history:
1022
904
         0 revisions
 
905
         0 committers
1023
906
 
1024
907
Repository:
1025
908
         1 revision
1047
930
        branch: %s
1048
931
    repository: %s
1049
932
 
1050
 
Control directory:
1051
 
         1 branches
1052
 
 
1053
933
In the working tree:
1054
934
         1 unchanged
1055
935
         0 modified
1062
942
 
1063
943
Branch history:
1064
944
         1 revision
 
945
         1 committer
1065
946
         0 days old
1066
947
   first revision: %s
1067
948
  latest revision: %s
1085
966
       control: Meta directory format 1
1086
967
    repository: %s
1087
968
 
1088
 
Control directory:
1089
 
         0 branches
1090
 
 
1091
969
Create working tree for new branches inside the repository.
1092
970
 
1093
971
Repository:
1096
974
       ),
1097
975
       out)
1098
976
        self.assertEqual('', err)
1099
 
 
 
977
    
1100
978
    def test_info_shared_repository_with_tree_in_root(self):
1101
 
        format = controldir.format_registry.make_bzrdir('knit')
 
979
        format = bzrdir.format_registry.make_bzrdir('knit')
1102
980
        transport = self.get_transport()
1103
981
 
1104
982
        # Create shared repository with working trees
1114
992
       control: Meta directory format 1
1115
993
    repository: %s
1116
994
 
1117
 
Control directory:
1118
 
         0 branches
1119
 
 
1120
995
Create working tree for new branches inside the repository.
1121
996
 
1122
997
Repository:
1142
1017
        branch: %s
1143
1018
    repository: %s
1144
1019
 
1145
 
Control directory:
1146
 
         1 branches
1147
 
 
1148
1020
In the working tree:
1149
1021
         0 unchanged
1150
1022
         0 modified
1157
1029
 
1158
1030
Branch history:
1159
1031
         0 revisions
 
1032
         0 committers
1160
1033
 
1161
1034
Repository:
1162
1035
         0 revisions
1165
1038
       ), out)
1166
1039
        self.assertEqual('', err)
1167
1040
 
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
1041
    def assertCheckoutStatusOutput(self,
1214
1042
        command_string, lco_tree, shared_repo=None,
1215
1043
        repo_branch=None,
1225
1053
        allow us, the test writers, to document what *should* be present in
1226
1054
        the output. Removing this separation would remove the value of the
1227
1055
        tests.
1228
 
 
 
1056
        
1229
1057
        :param path: the path to the light checkout.
1230
1058
        :param lco_tree: the tree object for the light checkout.
1231
1059
        :param shared_repo: A shared repository is in use, expect that in
1239
1067
            actually locked then this parameter is overridden. This is because
1240
1068
            pack repositories do not have any public API for obtaining an
1241
1069
            exclusive repository wide lock.
1242
 
        :param verbose: verbosity level: 2 or higher to show committers
 
1070
        :param verbose: If true, expect verbose output
1243
1071
        """
1244
1072
        def friendly_location(url):
1245
1073
            path = urlutils.unescape_for_display(url, 'ascii')
1264
1092
            (False, True): 'Lightweight checkout',
1265
1093
            (False, False): 'Checkout',
1266
1094
            }[(shared_repo is not None, light_checkout)]
1267
 
        format = {True: self._repo_strings,
1268
 
                  False: 'unnamed'}[light_checkout]
 
1095
        format = {True: '1.6 or 1.6.1-rich-root'
 
1096
                        ' or dirstate or dirstate-tags or pack-0.92'
 
1097
                        ' or rich-root or rich-root-pack',
 
1098
                  False: 'dirstate'}[light_checkout]
1269
1099
        if repo_locked:
1270
1100
            repo_locked = lco_tree.branch.repository.get_physical_lock_status()
1271
1101
        if repo_locked or branch_locked or tree_locked:
1308
1138
        else:
1309
1139
            branch_data = ("   checkout of branch: %s\n" %
1310
1140
                lco_tree.branch.bzrdir.root_transport.base)
1311
 
 
1312
 
        if verbose >= 2:
 
1141
        
 
1142
        if verbose:
1313
1143
            verbose_info = '         0 committers\n'
1314
1144
        else:
1315
1145
            verbose_info = ''
1316
 
 
 
1146
            
1317
1147
        self.assertEqualDiff(
1318
1148
"""%s (format: %s)
1319
1149
Location:
1324
1154
        branch: %s
1325
1155
    repository: %s
1326
1156
%s
1327
 
Control directory:
1328
 
         1 branches
1329
 
 
1330
1157
In the working tree:
1331
1158
         0 unchanged
1332
1159
         0 modified
1361
1188
                                    format=bzrdir.BzrDirMetaFormat1())
1362
1189
        repo.set_make_working_trees(False)
1363
1190
        repo.bzrdir.root_transport.mkdir('branch')
1364
 
        repo_branch = controldir.ControlDir.create_branch_convenience(
1365
 
            'repo/branch', format=bzrdir.BzrDirMetaFormat1())
 
1191
        repo_branch = repo.bzrdir.create_branch_convenience('repo/branch',
 
1192
                                    format=bzrdir.BzrDirMetaFormat1())
1366
1193
        # Do a heavy checkout
1367
1194
        transport.mkdir('tree')
1368
1195
        transport.mkdir('tree/checkout')
1369
 
        co_branch = controldir.ControlDir.create_branch_convenience(
1370
 
            'tree/checkout', format=bzrdir.BzrDirMetaFormat1())
 
1196
        co_branch = bzrdir.BzrDir.create_branch_convenience('tree/checkout',
 
1197
            format=bzrdir.BzrDirMetaFormat1())
1371
1198
        co_branch.bind(repo_branch)
1372
1199
        # Do a light checkout of the heavy one
1373
1200
        transport.mkdir('tree/lightcheckout')
1374
1201
        lco_dir = bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
1375
 
        lco_dir.set_branch_reference(co_branch)
 
1202
        branch.BranchReferenceFormat().initialize(lco_dir, co_branch)
1376
1203
        lco_dir.create_workingtree()
1377
1204
        lco_tree = lco_dir.open_workingtree()
1378
1205
 
1466
1293
            self.knownFailure('Win32 cannot run "bzr info"'
1467
1294
                              ' when the tree is locked.')
1468
1295
 
 
1296
    def test_info_locking_oslocks(self):
 
1297
        if sys.platform == "win32":
 
1298
            raise TestSkipped("don't use oslocks on win32 in unix manner")
 
1299
 
 
1300
        tree = self.make_branch_and_tree('branch',
 
1301
                                         format=bzrdir.BzrDirFormat6())
 
1302
 
 
1303
        # Test all permutations of locking the working tree, branch and repository
 
1304
        # XXX: Well not yet, as we can't query oslocks yet. Currently, it's
 
1305
        # implemented by raising NotImplementedError and get_physical_lock_status()
 
1306
        # always returns false. This makes bzr info hide the lock status.  (Olaf)
 
1307
        # W B R
 
1308
 
 
1309
        # U U U
 
1310
        out, err = self.run_bzr('info -v branch')
 
1311
        self.assertEqualDiff(
 
1312
"""Standalone tree (format: weave)
 
1313
Location:
 
1314
  branch root: %s
 
1315
 
 
1316
Format:
 
1317
       control: All-in-one format 6
 
1318
  working tree: Working tree format 2
 
1319
        branch: Branch format 4
 
1320
    repository: %s
 
1321
 
 
1322
In the working tree:
 
1323
         0 unchanged
 
1324
         0 modified
 
1325
         0 added
 
1326
         0 removed
 
1327
         0 renamed
 
1328
         0 unknown
 
1329
         0 ignored
 
1330
         0 versioned subdirectories
 
1331
 
 
1332
Branch history:
 
1333
         0 revisions
 
1334
         0 committers
 
1335
 
 
1336
Repository:
 
1337
         0 revisions
 
1338
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1339
       ), out)
 
1340
        self.assertEqual('', err)
 
1341
        # L L L
 
1342
        tree.lock_write()
 
1343
        out, err = self.run_bzr('info -v branch')
 
1344
        self.assertEqualDiff(
 
1345
"""Standalone tree (format: weave)
 
1346
Location:
 
1347
  branch root: %s
 
1348
 
 
1349
Format:
 
1350
       control: All-in-one format 6
 
1351
  working tree: Working tree format 2
 
1352
        branch: Branch format 4
 
1353
    repository: %s
 
1354
 
 
1355
In the working tree:
 
1356
         0 unchanged
 
1357
         0 modified
 
1358
         0 added
 
1359
         0 removed
 
1360
         0 renamed
 
1361
         0 unknown
 
1362
         0 ignored
 
1363
         0 versioned subdirectories
 
1364
 
 
1365
Branch history:
 
1366
         0 revisions
 
1367
         0 committers
 
1368
 
 
1369
Repository:
 
1370
         0 revisions
 
1371
""" % ('branch', tree.branch.repository._format.get_format_description(),
 
1372
       ), out)
 
1373
        self.assertEqual('', err)
 
1374
        tree.unlock()
 
1375
 
1469
1376
    def test_info_stacked(self):
1470
1377
        # We have a mainline
1471
1378
        trunk_tree = self.make_branch_and_tree('mainline',
1472
 
            format='1.6')
 
1379
            format='development1')
1473
1380
        trunk_tree.commit('mainline')
1474
1381
        # and a branch from it which is stacked
1475
1382
        new_dir = trunk_tree.bzrdir.sprout('newbranch', stacked=True)
1476
1383
        out, err = self.run_bzr('info newbranch')
1477
1384
        self.assertEqual(
1478
 
"""Standalone tree (format: 1.6)
 
1385
"""Standalone tree (format: development1)
1479
1386
Location:
1480
1387
  branch root: newbranch
1481
1388
 
1484
1391
     stacked on: mainline
1485
1392
""", out)
1486
1393
        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)