~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Robert Collins
  • Date: 2007-03-08 04:06:06 UTC
  • mfrom: (2323.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 2442.
  • Revision ID: robertc@robertcollins.net-20070308040606-84gsniv56huiyjt4
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 by Canonical Ltd
2
 
# -*- coding: utf-8 -*-
3
 
 
 
1
# Copyright (C) 2006, 2007 Canonical Ltd
 
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
6
5
# the Free Software Foundation; either version 2 of the License, or
7
6
# (at your option) any later version.
8
 
 
 
7
#
9
8
# This program is distributed in the hope that it will be useful,
10
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
11
# GNU General Public License for more details.
13
 
 
 
12
#
14
13
# You should have received a copy of the GNU General Public License
15
14
# along with this program; if not, write to the Free Software
16
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
17
 
19
18
"""Tests for the info command of bzr."""
20
19
 
 
20
import sys
21
21
 
22
22
import bzrlib
23
 
 
24
 
 
 
23
from bzrlib import (
 
24
    bzrdir,
 
25
    repository,
 
26
    )
25
27
from bzrlib.osutils import format_date
26
28
from bzrlib.tests import TestSkipped
27
29
from bzrlib.tests.blackbox import ExternalBase
30
32
class TestInfo(ExternalBase):
31
33
 
32
34
    def test_info_non_existing(self):
33
 
        out, err = self.runbzr('info /i/do/not/exist/', retcode=3)
 
35
        if sys.platform == "win32":
 
36
            location = "C:/i/do/not/exist/"
 
37
        else:
 
38
            location = "/i/do/not/exist/"
 
39
        out, err = self.runbzr('info '+location, retcode=3)
34
40
        self.assertEqual(out, '')
35
 
        self.assertEqual(err, 'bzr: ERROR: Not a branch: /i/do/not/exist/\n')
 
41
        self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
36
42
 
37
43
    def test_info_standalone(self):
38
44
        transport = self.get_transport()
39
45
 
40
46
        # Create initial standalone branch
41
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
42
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirFormat6())
43
 
        tree1 = self.make_branch_and_tree('standalone')
44
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
47
        tree1 = self.make_branch_and_tree('standalone', 'weave')
45
48
        self.build_tree(['standalone/a'])
46
49
        tree1.add('a')
47
50
        branch1 = tree1.branch
130
133
        # Branch and bind to standalone, needs upgrade to metadir
131
134
        # (creates backup as unknown)
132
135
        branch1.bzrdir.sprout('bound')
133
 
        bzrlib.upgrade.upgrade('bound', bzrlib.bzrdir.BzrDirMetaFormat1())
 
136
        knit1_format = bzrdir.format_registry.make_bzrdir('knit')
 
137
        bzrlib.upgrade.upgrade('bound', knit1_format)
134
138
        branch3 = bzrlib.bzrdir.BzrDir.open('bound').open_branch()
135
139
        branch3.bind(branch1)
 
140
        bound_tree = branch3.bzrdir.open_workingtree()
136
141
        out, err = self.runbzr('info bound')
137
142
        self.assertEqualDiff(
138
143
"""Location:
144
149
 
145
150
Format:
146
151
       control: Meta directory format 1
147
 
  working tree: Working tree format 3
148
 
        branch: Branch format 5
 
152
  working tree: %s
 
153
        branch: %s
149
154
    repository: %s
150
155
 
151
156
In the working tree:
170
175
""" % (branch3.bzrdir.root_transport.base,
171
176
       branch1.bzrdir.root_transport.base,
172
177
       branch1.bzrdir.root_transport.base,
 
178
       bound_tree._format.get_format_description(),      
 
179
       branch3._format.get_format_description(),
173
180
       branch3.repository._format.get_format_description(),
174
181
       datestring_first, datestring_first,
175
182
       # poking at _revision_store isn't all that clean, but neither is
180
187
        self.assertEqual('', err)
181
188
 
182
189
        # Checkout standalone (same as above, but does not have parent set)
183
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
184
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
185
 
        branch4 = bzrlib.bzrdir.BzrDir.create_branch_convenience('checkout')
186
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
190
        branch4 = bzrlib.bzrdir.BzrDir.create_branch_convenience('checkout',
 
191
            format=knit1_format)
187
192
        branch4.bind(branch1)
188
193
        branch4.bzrdir.open_workingtree().update()
189
194
        out, err = self.runbzr('info checkout --verbose')
230
235
        self.assertEqual('', err)
231
236
 
232
237
        # Lightweight checkout (same as above, different branch and repository)
233
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
234
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
235
 
        transport.mkdir('lightcheckout')
236
 
        dir5 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('lightcheckout')
237
 
        bzrlib.branch.BranchReferenceFormat().initialize(dir5, branch1)
238
 
        dir5.create_workingtree()
239
 
        tree5 = dir5.open_workingtree()
240
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
238
        tree5 = branch1.create_checkout('lightcheckout', lightweight=True)
241
239
        branch5 = tree5.branch
242
240
        out, err = self.runbzr('info lightcheckout')
243
241
        self.assertEqualDiff(
244
242
"""Location:
245
 
  light checkout root: %s
246
 
   checkout of branch: %s
 
243
 light checkout root: %s
 
244
  checkout of branch: %s
247
245
 
248
246
Format:
249
247
       control: Meta directory format 1
250
 
  working tree: Working tree format 3
 
248
  working tree: Working tree format 4
251
249
        branch: Branch format 4
252
250
    repository: Weave repository format 6
253
251
 
423
421
        out, err = self.runbzr('info lightcheckout --verbose')
424
422
        self.assertEqualDiff(
425
423
"""Location:
426
 
  light checkout root: %s
427
 
   checkout of branch: %s
 
424
 light checkout root: %s
 
425
  checkout of branch: %s
428
426
 
429
427
Format:
430
428
       control: Meta directory format 1
431
 
  working tree: Working tree format 3
 
429
  working tree: Working tree format 4
432
430
        branch: Branch format 4
433
431
    repository: Weave repository format 6
434
432
 
462
460
 
463
461
    def test_info_standalone_no_tree(self):
464
462
        # create standalone branch without a working tree
 
463
        format = bzrdir.format_registry.make_bzrdir('default')
465
464
        branch = self.make_branch('branch')
466
465
        repo = branch.repository
467
466
        out, err = self.runbzr('info branch')
471
470
 
472
471
Format:
473
472
       control: Meta directory format 1
474
 
        branch: Branch format 5
 
473
        branch: %s
475
474
    repository: %s
476
475
 
477
476
Branch history:
481
480
         0 revisions
482
481
         0 KiB
483
482
""" % (branch.bzrdir.root_transport.base,
484
 
       repo._format.get_format_description(),
 
483
       format.get_branch_format().get_format_description(),
 
484
       format.repository_format.get_format_description(),
485
485
       ), out)
486
486
        self.assertEqual('', err)
487
487
 
488
488
    def test_info_shared_repository(self):
489
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
490
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
 
489
        format = bzrdir.format_registry.make_bzrdir('knit')
491
490
        transport = self.get_transport()
492
491
 
493
492
        # Create shared repository
494
 
        repo = self.make_repository('repo', shared=True)
 
493
        repo = self.make_repository('repo', shared=True, format=format)
495
494
        repo.set_make_working_trees(False)
496
495
        out, err = self.runbzr('info repo')
497
496
        self.assertEqualDiff(
506
505
         0 revisions
507
506
         0 KiB
508
507
""" % (repo.bzrdir.root_transport.base,
509
 
       repo._format.get_format_description(),
 
508
       format.repository_format.get_format_description(),
510
509
       ), out)
511
510
        self.assertEqual('', err)
512
511
 
513
512
        # Create branch inside shared repository
514
513
        repo.bzrdir.root_transport.mkdir('branch')
515
 
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch')
 
514
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch',
 
515
            format=format)
516
516
        out, err = self.runbzr('info repo/branch')
517
517
        self.assertEqualDiff(
518
518
"""Location:
521
521
 
522
522
Format:
523
523
       control: Meta directory format 1
524
 
        branch: Branch format 5
 
524
        branch: %s
525
525
    repository: %s
526
526
 
527
527
Branch history:
531
531
         0 revisions
532
532
         0 KiB
533
533
""" % (repo.bzrdir.root_transport.base,
534
 
       repo._format.get_format_description(),
 
534
       format.get_branch_format().get_format_description(),
 
535
       format.repository_format.get_format_description(),
535
536
       ), out)
536
537
        self.assertEqual('', err)
537
538
 
538
539
        # Create lightweight checkout
539
540
        transport.mkdir('tree')
540
541
        transport.mkdir('tree/lightcheckout')
541
 
        dir2 = bzrlib.bzrdir.BzrDirMetaFormat1().initialize('tree/lightcheckout')
542
 
        bzrlib.branch.BranchReferenceFormat().initialize(dir2, branch1)
543
 
        dir2.create_workingtree()
544
 
        tree2 = dir2.open_workingtree()
 
542
        tree2 = branch1.create_checkout('tree/lightcheckout', 
 
543
            lightweight=True)
545
544
        branch2 = tree2.branch
546
 
        out, err = self.runbzr('info tree/lightcheckout')
547
 
        self.assertEqualDiff(
548
 
"""Location:
549
 
  light checkout root: %s
550
 
    shared repository: %s
551
 
    repository branch: branch
552
 
 
553
 
Format:
554
 
       control: Meta directory format 1
555
 
  working tree: Working tree format 3
556
 
        branch: Branch format 5
557
 
    repository: %s
558
 
 
559
 
In the working tree:
560
 
         0 unchanged
561
 
         0 modified
562
 
         0 added
563
 
         0 removed
564
 
         0 renamed
565
 
         0 unknown
566
 
         0 ignored
567
 
         0 versioned subdirectories
568
 
 
569
 
Branch history:
570
 
         0 revisions
571
 
 
572
 
Revision store:
573
 
         0 revisions
574
 
         0 KiB
575
 
""" % (tree2.bzrdir.root_transport.base,
576
 
       repo.bzrdir.root_transport.base,
577
 
       repo._format.get_format_description(),
578
 
       ), out)
579
 
        self.assertEqual('', err)
 
545
        self.assertCheckoutStatusOutput('tree/lightcheckout', tree2, 
 
546
                   shared_repo=repo)
580
547
 
581
548
        # Create normal checkout
582
 
        branch3 = bzrlib.bzrdir.BzrDir.create_branch_convenience('tree/checkout')
583
 
        branch3.bind(branch1)
584
 
        tree3 = branch3.bzrdir.open_workingtree()
585
 
        tree3.update()
586
 
        out, err = self.runbzr('info tree/checkout --verbose')
587
 
        self.assertEqualDiff(
588
 
"""Location:
589
 
       checkout root: %s
590
 
  checkout of branch: %s
591
 
 
592
 
Format:
593
 
       control: Meta directory format 1
594
 
  working tree: Working tree format 3
595
 
        branch: Branch format 5
596
 
    repository: %s
597
 
 
598
 
In the working tree:
599
 
         0 unchanged
600
 
         0 modified
601
 
         0 added
602
 
         0 removed
603
 
         0 renamed
604
 
         0 unknown
605
 
         0 ignored
606
 
         0 versioned subdirectories
607
 
 
608
 
Branch history:
609
 
         0 revisions
610
 
         0 committers
611
 
 
612
 
Revision store:
613
 
         0 revisions
614
 
         0 KiB
615
 
""" % (branch3.bzrdir.root_transport.base,
616
 
       branch1.bzrdir.root_transport.base,
617
 
       repo._format.get_format_description(),
618
 
       ), out)
619
 
        self.assertEqual('', err)
620
 
 
 
549
        tree3 = branch1.create_checkout('tree/checkout')
 
550
        self.assertCheckoutStatusOutput('tree/checkout --verbose', tree3,
 
551
            verbose=True,
 
552
            light_checkout=False, repo_branch=branch1)
621
553
        # Update lightweight checkout
622
554
        self.build_tree(['tree/lightcheckout/a'])
623
555
        tree2.add('a')
627
559
        out, err = self.runbzr('info tree/lightcheckout --verbose')
628
560
        self.assertEqualDiff(
629
561
"""Location:
630
 
  light checkout root: %s
631
 
    shared repository: %s
632
 
    repository branch: branch
 
562
 light checkout root: %s
 
563
   shared repository: %s
 
564
   repository branch: branch
633
565
 
634
566
Format:
635
567
       control: Meta directory format 1
636
 
  working tree: Working tree format 3
637
 
        branch: Branch format 5
 
568
  working tree: Working tree format 4
 
569
        branch: %s
638
570
    repository: %s
639
571
 
640
572
In the working tree:
659
591
         %d KiB
660
592
""" % (tree2.bzrdir.root_transport.base,
661
593
       repo.bzrdir.root_transport.base,
662
 
       repo._format.get_format_description(),
 
594
       format.get_branch_format().get_format_description(),
 
595
       format.repository_format.get_format_description(),
663
596
       datestring_first, datestring_first,
664
597
       # poking at _revision_store isn't all that clean, but neither is
665
598
       # having the ui test dependent on the exact overhead of a given store.
676
609
 
677
610
Format:
678
611
       control: Meta directory format 1
679
 
  working tree: Working tree format 3
680
 
        branch: Branch format 5
 
612
  working tree: Working tree format 4
 
613
        branch: %s
681
614
    repository: %s
682
615
 
683
616
Branch is out of date: missing 1 revision.
700
633
         0 KiB
701
634
""" % (tree3.bzrdir.root_transport.base,
702
635
       branch1.bzrdir.root_transport.base,
703
 
       repo._format.get_format_description(),
 
636
       format.get_branch_format().get_format_description(),
 
637
       format.repository_format.get_format_description(),
704
638
       ), out)
705
639
        self.assertEqual('', err)
706
640
 
716
650
 
717
651
Format:
718
652
       control: Meta directory format 1
719
 
  working tree: Working tree format 3
720
 
        branch: Branch format 5
 
653
  working tree: Working tree format 4
 
654
        branch: %s
721
655
    repository: %s
722
656
 
723
657
In the working tree:
741
675
         1 revision
742
676
         %d KiB
743
677
""" % (tree3.bzrdir.root_transport.base, branch1.bzrdir.root_transport.base,
744
 
       repo._format.get_format_description(),
 
678
       format.get_branch_format().get_format_description(),
 
679
       format.repository_format.get_format_description(),
745
680
       datestring_first, datestring_first,
746
681
       # poking at _revision_store isn't all that clean, but neither is
747
682
       # having the ui test dependent on the exact overhead of a given store.
756
691
        out, err = self.runbzr('info tree/lightcheckout --verbose')
757
692
        self.assertEqualDiff(
758
693
"""Location:
759
 
  light checkout root: %s
760
 
    shared repository: %s
761
 
    repository branch: branch
 
694
 light checkout root: %s
 
695
   shared repository: %s
 
696
   repository branch: branch
762
697
 
763
698
Format:
764
699
       control: Meta directory format 1
765
 
  working tree: Working tree format 3
766
 
        branch: Branch format 5
 
700
  working tree: Working tree format 4
 
701
        branch: %s
767
702
    repository: %s
768
703
 
769
704
Working tree is out of date: missing 1 revision.
790
725
         %d KiB
791
726
""" % (tree2.bzrdir.root_transport.base,
792
727
       repo.bzrdir.root_transport.base,
793
 
       repo._format.get_format_description(),
 
728
       format.get_branch_format().get_format_description(),
 
729
       format.repository_format.get_format_description(),
794
730
       datestring_first, datestring_last,
795
731
       # poking at _revision_store isn't all that clean, but neither is
796
732
       # having the ui test dependent on the exact overhead of a given store.
807
743
 
808
744
Format:
809
745
       control: Meta directory format 1
810
 
        branch: Branch format 5
 
746
        branch: %s
811
747
    repository: %s
812
748
 
813
749
Branch history:
821
757
         2 revisions
822
758
         %d KiB
823
759
""" % (repo.bzrdir.root_transport.base,
824
 
       repo._format.get_format_description(),
 
760
       format.get_branch_format().get_format_description(),
 
761
       format.repository_format.get_format_description(),
825
762
       datestring_first, datestring_last,
826
763
       # poking at _revision_store isn't all that clean, but neither is
827
764
       # having the ui test dependent on the exact overhead of a given store.
843
780
         2 revisions
844
781
         %d KiB
845
782
""" % (repo.bzrdir.root_transport.base,
846
 
       repo._format.get_format_description(),
 
783
       format.repository_format.get_format_description(),
847
784
       # poking at _revision_store isn't all that clean, but neither is
848
785
       # having the ui test dependent on the exact overhead of a given store.
849
786
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
850
787
       ), out)
851
788
        self.assertEqual('', err)
852
789
 
853
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
854
 
 
855
790
    def test_info_shared_repository_with_trees(self):
856
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
857
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
 
791
        format = bzrdir.format_registry.make_bzrdir('knit')
858
792
        transport = self.get_transport()
859
793
 
860
794
        # Create shared repository with working trees
861
 
        repo = self.make_repository('repo', shared=True)
 
795
        repo = self.make_repository('repo', shared=True, format=format)
862
796
        repo.set_make_working_trees(True)
863
797
        out, err = self.runbzr('info repo')
864
798
        self.assertEqualDiff(
875
809
         0 revisions
876
810
         0 KiB
877
811
""" % (repo.bzrdir.root_transport.base,
878
 
       repo._format.get_format_description(),
 
812
       format.repository_format.get_format_description(),
879
813
       ), out)
880
814
        self.assertEqual('', err)
881
815
 
882
816
        # Create two branches
883
817
        repo.bzrdir.root_transport.mkdir('branch1')
884
 
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1')
 
818
        branch1 = repo.bzrdir.create_branch_convenience('repo/branch1',
 
819
            format=format)
885
820
        branch2 = branch1.bzrdir.sprout('repo/branch2').open_branch()
886
821
 
887
822
        # Empty first branch
894
829
Format:
895
830
       control: Meta directory format 1
896
831
  working tree: Working tree format 3
897
 
        branch: Branch format 5
 
832
        branch: %s
898
833
    repository: %s
899
834
 
900
835
In the working tree:
915
850
         0 revisions
916
851
         0 KiB
917
852
""" % (repo.bzrdir.root_transport.base,
918
 
       repo._format.get_format_description(),
 
853
       format.get_branch_format().get_format_description(),
 
854
       format.repository_format.get_format_description(),
919
855
       ), out)
920
856
        self.assertEqual('', err)
921
857
 
935
871
Format:
936
872
       control: Meta directory format 1
937
873
  working tree: Working tree format 3
938
 
        branch: Branch format 5
 
874
        branch: %s
939
875
    repository: %s
940
876
 
941
877
In the working tree:
958
894
         1 revision
959
895
         %d KiB
960
896
""" % (repo.bzrdir.root_transport.base,
961
 
       repo._format.get_format_description(),
 
897
       format.get_branch_format().get_format_description(),
 
898
       format.repository_format.get_format_description(),
962
899
       datestring_first, datestring_first,
963
900
       # poking at _revision_store isn't all that clean, but neither is
964
901
       # having the ui test dependent on the exact overhead of a given store.
979
916
Format:
980
917
       control: Meta directory format 1
981
918
  working tree: Working tree format 3
982
 
        branch: Branch format 5
 
919
        branch: %s
983
920
    repository: %s
984
921
 
985
922
In the working tree:
1001
938
         %d KiB
1002
939
""" % (repo.bzrdir.root_transport.base,
1003
940
       branch1.bzrdir.root_transport.base,
1004
 
       repo._format.get_format_description(),
 
941
       format.get_branch_format().get_format_description(),
 
942
       format.repository_format.get_format_description(),
1005
943
       # poking at _revision_store isn't all that clean, but neither is
1006
944
       # having the ui test dependent on the exact overhead of a given store.
1007
945
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
1023
961
Format:
1024
962
       control: Meta directory format 1
1025
963
  working tree: Working tree format 3
1026
 
        branch: Branch format 5
 
964
        branch: %s
1027
965
    repository: %s
1028
966
 
1029
967
In the working tree:
1047
985
         %d KiB
1048
986
""" % (repo.bzrdir.root_transport.base,
1049
987
       branch1.bzrdir.root_transport.base,
1050
 
       repo._format.get_format_description(),
 
988
       format.get_branch_format().get_format_description(),
 
989
       format.repository_format.get_format_description(),
1051
990
       datestring_first, datestring_first,
1052
991
       # poking at _revision_store isn't all that clean, but neither is
1053
992
       # having the ui test dependent on the exact overhead of a given store.
1071
1010
         1 revision
1072
1011
         %d KiB
1073
1012
""" % (repo.bzrdir.root_transport.base,
1074
 
       repo._format.get_format_description(),
 
1013
       format.repository_format.get_format_description(),
1075
1014
       # poking at _revision_store isn't all that clean, but neither is
1076
1015
       # having the ui test dependent on the exact overhead of a given store.
1077
1016
       repo._revision_store.total_size(repo.get_transaction())[1] / 1024,
1078
1017
       ),
1079
1018
       out)
1080
1019
        self.assertEqual('', err)
1081
 
 
1082
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
1083
1020
    
1084
1021
    def test_info_shared_repository_with_tree_in_root(self):
1085
 
        old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
1086
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(bzrlib.bzrdir.BzrDirMetaFormat1())
 
1022
        format = bzrdir.format_registry.make_bzrdir('knit')
1087
1023
        transport = self.get_transport()
1088
1024
 
1089
1025
        # Create shared repository with working trees
1090
 
        repo = self.make_repository('repo', shared=True)
 
1026
        repo = self.make_repository('repo', shared=True, format=format)
1091
1027
        repo.set_make_working_trees(True)
1092
1028
        out, err = self.runbzr('info repo')
1093
1029
        self.assertEqualDiff(
1104
1040
         0 revisions
1105
1041
         0 KiB
1106
1042
""" % (repo.bzrdir.root_transport.base,
1107
 
       repo._format.get_format_description(),
 
1043
       format.repository_format.get_format_description(),
1108
1044
       ), out)
1109
1045
        self.assertEqual('', err)
1110
1046
 
1121
1057
Format:
1122
1058
       control: Meta directory format 1
1123
1059
  working tree: Working tree format 3
1124
 
        branch: Branch format 5
 
1060
        branch: %s
1125
1061
    repository: %s
1126
1062
 
1127
1063
In the working tree:
1141
1077
         0 revisions
1142
1078
         0 KiB
1143
1079
""" % (repo.bzrdir.root_transport.base,
1144
 
       repo._format.get_format_description(),
 
1080
       format.get_branch_format().get_format_description(),
 
1081
       format.repository_format.get_format_description(),
1145
1082
       ), out)
1146
1083
        self.assertEqual('', err)
1147
1084
 
1148
 
        bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
 
1085
    def assertCheckoutStatusOutput(self, 
 
1086
        command_string, lco_tree, shared_repo=None,
 
1087
        repo_branch=None,
 
1088
        tree_locked=False,
 
1089
        branch_locked=False, repo_locked=False,
 
1090
        verbose=False,
 
1091
        light_checkout=True):
 
1092
        """Check the output of info in a light checkout tree.
 
1093
 
 
1094
        This is not quite a mirror of the info code: rather than using the
 
1095
        tree being examined to predict output, it uses a bunch of flags which
 
1096
        allow us, the test writers, to document what *should* be present in
 
1097
        the output. Removing this separation would remove the value of the
 
1098
        tests.
 
1099
        
 
1100
        :param path: the path to the light checkout.
 
1101
        :param lco_tree: the tree object for the light checkout.
 
1102
        :param shared_repo: A shared repository is in use, expect that in
 
1103
            the output.
 
1104
        :param repo_branch: A branch in a shared repository for non light
 
1105
            checkouts.
 
1106
        :param tree_locked: If true, expect the tree to be locked.
 
1107
        :param branch_locked: If true, expect the branch to be locked.
 
1108
        :param repo_locked: If true, expect the repository to be locked.
 
1109
        :param verbose: If true, expect verbose output
 
1110
        """
 
1111
        out, err = self.runbzr('info %s' % command_string)
 
1112
        if repo_locked or branch_locked or tree_locked:
 
1113
            def locked_message(a_bool):
 
1114
                if a_bool:
 
1115
                    return 'locked'
 
1116
                else:
 
1117
                    return 'unlocked'
 
1118
            expected_lock_output = (
 
1119
                "\n"
 
1120
                "Lock status:\n"
 
1121
                "  working tree: %s\n"
 
1122
                "        branch: %s\n"
 
1123
                "    repository: %s\n" % (
 
1124
                    locked_message(tree_locked),
 
1125
                    locked_message(branch_locked),
 
1126
                    locked_message(repo_locked)))
 
1127
        else:
 
1128
            expected_lock_output = ''
 
1129
        if light_checkout:
 
1130
            tree_data = (" light checkout root: %s" %
 
1131
                lco_tree.bzrdir.root_transport.base)
 
1132
        else:
 
1133
            tree_data = ("       checkout root: %s" %
 
1134
                lco_tree.bzrdir.root_transport.base)
 
1135
        if shared_repo is not None:
 
1136
            branch_data = (
 
1137
                "   shared repository: %s\n"
 
1138
                "   repository branch: branch\n" %
 
1139
                shared_repo.bzrdir.root_transport.base)
 
1140
        elif repo_branch is not None:
 
1141
            branch_data = (
 
1142
                "  checkout of branch: %s\n" % 
 
1143
                repo_branch.bzrdir.root_transport.base)
 
1144
        else:
 
1145
            branch_data = ("  checkout of branch: %s\n" % 
 
1146
                lco_tree.branch.bzrdir.root_transport.base)
 
1147
        
 
1148
        if verbose:
 
1149
            verbose_info = '         0 committers\n'
 
1150
        else:
 
1151
            verbose_info = ''
 
1152
            
 
1153
        self.assertEqualDiff(
 
1154
"""Location:
 
1155
%s
 
1156
%s
 
1157
Format:
 
1158
       control: Meta directory format 1
 
1159
  working tree: %s
 
1160
        branch: %s
 
1161
    repository: %s
 
1162
%s
 
1163
In the working tree:
 
1164
         0 unchanged
 
1165
         0 modified
 
1166
         0 added
 
1167
         0 removed
 
1168
         0 renamed
 
1169
         0 unknown
 
1170
         0 ignored
 
1171
         0 versioned subdirectories
 
1172
 
 
1173
Branch history:
 
1174
         0 revisions
 
1175
%s
 
1176
Revision store:
 
1177
         0 revisions
 
1178
         0 KiB
 
1179
""" %  (tree_data,
 
1180
        branch_data,
 
1181
        lco_tree._format.get_format_description(),
 
1182
        lco_tree.branch._format.get_format_description(),
 
1183
        lco_tree.branch.repository._format.get_format_description(),
 
1184
        expected_lock_output,
 
1185
        verbose_info,
 
1186
        ), out)
 
1187
        self.assertEqual('', err)
1149
1188
 
1150
1189
    def test_info_locking(self):
1151
1190
        transport = self.get_transport()
1160
1199
        transport.mkdir('tree')
1161
1200
        transport.mkdir('tree/checkout')
1162
1201
        co_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience('tree/checkout',
1163
 
                                    format=bzrlib.bzrdir.BzrDirMetaFormat1())
 
1202
            format=bzrlib.bzrdir.BzrDirMetaFormat1())
1164
1203
        co_branch.bind(repo_branch)
1165
1204
        # Do a light checkout of the heavy one
1166
1205
        transport.mkdir('tree/lightcheckout')
1173
1212
        # W B R
1174
1213
 
1175
1214
        # U U U
1176
 
        out, err = self.runbzr('info tree/lightcheckout')
1177
 
        self.assertEqualDiff(
1178
 
"""Location:
1179
 
  light checkout root: %s
1180
 
   checkout of branch: %s
1181
 
 
1182
 
Format:
1183
 
       control: Meta directory format 1
1184
 
  working tree: Working tree format 3
1185
 
        branch: Branch format 5
1186
 
    repository: %s
1187
 
 
1188
 
In the working tree:
1189
 
         0 unchanged
1190
 
         0 modified
1191
 
         0 added
1192
 
         0 removed
1193
 
         0 renamed
1194
 
         0 unknown
1195
 
         0 ignored
1196
 
         0 versioned subdirectories
1197
 
 
1198
 
Branch history:
1199
 
         0 revisions
1200
 
 
1201
 
Revision store:
1202
 
         0 revisions
1203
 
         0 KiB
1204
 
""" % (lco_tree.bzrdir.root_transport.base,
1205
 
       lco_tree.branch.bzrdir.root_transport.base,
1206
 
       lco_tree.branch.repository._format.get_format_description(),
1207
 
       ), out)
1208
 
        self.assertEqual('', err)
 
1215
        self.assertCheckoutStatusOutput('tree/lightcheckout', lco_tree)
1209
1216
        # U U L
1210
1217
        lco_tree.branch.repository.lock_write()
1211
 
        out, err = self.runbzr('info tree/lightcheckout')
1212
 
        self.assertEqualDiff(
1213
 
"""Location:
1214
 
  light checkout root: %s
1215
 
   checkout of branch: %s
1216
 
 
1217
 
Format:
1218
 
       control: Meta directory format 1
1219
 
  working tree: Working tree format 3
1220
 
        branch: Branch format 5
1221
 
    repository: %s
1222
 
 
1223
 
Lock status:
1224
 
  working tree: unlocked
1225
 
        branch: unlocked
1226
 
    repository: locked
1227
 
 
1228
 
In the working tree:
1229
 
         0 unchanged
1230
 
         0 modified
1231
 
         0 added
1232
 
         0 removed
1233
 
         0 renamed
1234
 
         0 unknown
1235
 
         0 ignored
1236
 
         0 versioned subdirectories
1237
 
 
1238
 
Branch history:
1239
 
         0 revisions
1240
 
 
1241
 
Revision store:
1242
 
         0 revisions
1243
 
         0 KiB
1244
 
""" % (lco_tree.bzrdir.root_transport.base,
1245
 
       lco_tree.branch.bzrdir.root_transport.base,
1246
 
       lco_tree.branch.repository._format.get_format_description(),
1247
 
       ), out)
1248
 
        self.assertEqual('', err)
1249
 
        lco_tree.branch.repository.unlock()
 
1218
        try:
 
1219
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1220
            lco_tree,
 
1221
            repo_locked=True)
 
1222
        finally:
 
1223
            lco_tree.branch.repository.unlock()
1250
1224
        # U L L
1251
1225
        lco_tree.branch.lock_write()
1252
 
        out, err = self.runbzr('info tree/lightcheckout')
1253
 
        self.assertEqualDiff(
1254
 
"""Location:
1255
 
  light checkout root: %s
1256
 
   checkout of branch: %s
1257
 
 
1258
 
Format:
1259
 
       control: Meta directory format 1
1260
 
  working tree: Working tree format 3
1261
 
        branch: Branch format 5
1262
 
    repository: %s
1263
 
 
1264
 
Lock status:
1265
 
  working tree: unlocked
1266
 
        branch: locked
1267
 
    repository: locked
1268
 
 
1269
 
In the working tree:
1270
 
         0 unchanged
1271
 
         0 modified
1272
 
         0 added
1273
 
         0 removed
1274
 
         0 renamed
1275
 
         0 unknown
1276
 
         0 ignored
1277
 
         0 versioned subdirectories
1278
 
 
1279
 
Branch history:
1280
 
         0 revisions
1281
 
 
1282
 
Revision store:
1283
 
         0 revisions
1284
 
         0 KiB
1285
 
""" % (lco_tree.bzrdir.root_transport.base,
1286
 
       lco_tree.branch.bzrdir.root_transport.base,
1287
 
       lco_tree.branch.repository._format.get_format_description(),
1288
 
       ), out)
1289
 
        self.assertEqual('', err)
1290
 
        lco_tree.branch.unlock()
 
1226
        try:
 
1227
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1228
            lco_tree,
 
1229
            branch_locked=True,
 
1230
            repo_locked=True)
 
1231
        finally:
 
1232
            lco_tree.branch.unlock()
1291
1233
        # L L L
1292
1234
        lco_tree.lock_write()
1293
 
        out, err = self.runbzr('info tree/lightcheckout')
1294
 
        self.assertEqualDiff(
1295
 
"""Location:
1296
 
  light checkout root: %s
1297
 
   checkout of branch: %s
1298
 
 
1299
 
Format:
1300
 
       control: Meta directory format 1
1301
 
  working tree: Working tree format 3
1302
 
        branch: Branch format 5
1303
 
    repository: %s
1304
 
 
1305
 
Lock status:
1306
 
  working tree: locked
1307
 
        branch: locked
1308
 
    repository: locked
1309
 
 
1310
 
In the working tree:
1311
 
         0 unchanged
1312
 
         0 modified
1313
 
         0 added
1314
 
         0 removed
1315
 
         0 renamed
1316
 
         0 unknown
1317
 
         0 ignored
1318
 
         0 versioned subdirectories
1319
 
 
1320
 
Branch history:
1321
 
         0 revisions
1322
 
 
1323
 
Revision store:
1324
 
         0 revisions
1325
 
         0 KiB
1326
 
""" % (lco_tree.bzrdir.root_transport.base,
1327
 
       lco_tree.branch.bzrdir.root_transport.base,
1328
 
       lco_tree.branch.repository._format.get_format_description(),
1329
 
       ), out)
1330
 
        self.assertEqual('', err)
1331
 
        lco_tree.unlock()
 
1235
        try:
 
1236
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1237
            lco_tree,
 
1238
            tree_locked=True,
 
1239
            branch_locked=True,
 
1240
            repo_locked=True)
 
1241
        finally:
 
1242
            lco_tree.unlock()
1332
1243
        # L L U
1333
1244
        lco_tree.lock_write()
1334
1245
        lco_tree.branch.repository.unlock()
1335
 
        out, err = self.runbzr('info tree/lightcheckout')
1336
 
        self.assertEqualDiff(
1337
 
"""Location:
1338
 
  light checkout root: %s
1339
 
   checkout of branch: %s
1340
 
 
1341
 
Format:
1342
 
       control: Meta directory format 1
1343
 
  working tree: Working tree format 3
1344
 
        branch: Branch format 5
1345
 
    repository: %s
1346
 
 
1347
 
Lock status:
1348
 
  working tree: locked
1349
 
        branch: locked
1350
 
    repository: unlocked
1351
 
 
1352
 
In the working tree:
1353
 
         0 unchanged
1354
 
         0 modified
1355
 
         0 added
1356
 
         0 removed
1357
 
         0 renamed
1358
 
         0 unknown
1359
 
         0 ignored
1360
 
         0 versioned subdirectories
1361
 
 
1362
 
Branch history:
1363
 
         0 revisions
1364
 
 
1365
 
Revision store:
1366
 
         0 revisions
1367
 
         0 KiB
1368
 
""" % (lco_tree.bzrdir.root_transport.base,
1369
 
       lco_tree.branch.bzrdir.root_transport.base,
1370
 
       lco_tree.branch.repository._format.get_format_description(),
1371
 
       ), out)
1372
 
        self.assertEqual('', err)
1373
 
        lco_tree.branch.repository.lock_write()
1374
 
        lco_tree.unlock()
 
1246
        try:
 
1247
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1248
            lco_tree,
 
1249
            tree_locked=True,
 
1250
            branch_locked=True)
 
1251
        finally:
 
1252
            lco_tree.branch.repository.lock_write()
 
1253
            lco_tree.unlock()
1375
1254
        # L U U
1376
1255
        lco_tree.lock_write()
1377
1256
        lco_tree.branch.unlock()
1378
 
        out, err = self.runbzr('info tree/lightcheckout')
1379
 
        self.assertEqualDiff(
1380
 
"""Location:
1381
 
  light checkout root: %s
1382
 
   checkout of branch: %s
1383
 
 
1384
 
Format:
1385
 
       control: Meta directory format 1
1386
 
  working tree: Working tree format 3
1387
 
        branch: Branch format 5
1388
 
    repository: %s
1389
 
 
1390
 
Lock status:
1391
 
  working tree: locked
1392
 
        branch: unlocked
1393
 
    repository: unlocked
1394
 
 
1395
 
In the working tree:
1396
 
         0 unchanged
1397
 
         0 modified
1398
 
         0 added
1399
 
         0 removed
1400
 
         0 renamed
1401
 
         0 unknown
1402
 
         0 ignored
1403
 
         0 versioned subdirectories
1404
 
 
1405
 
Branch history:
1406
 
         0 revisions
1407
 
 
1408
 
Revision store:
1409
 
         0 revisions
1410
 
         0 KiB
1411
 
""" % (lco_tree.bzrdir.root_transport.base,
1412
 
       lco_tree.branch.bzrdir.root_transport.base,
1413
 
       lco_tree.branch.repository._format.get_format_description(),
1414
 
       ), out)
1415
 
        self.assertEqual('', err)
1416
 
        lco_tree.branch.lock_write()
1417
 
        lco_tree.unlock()
 
1257
        try:
 
1258
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1259
            lco_tree,
 
1260
            tree_locked=True)
 
1261
        finally:
 
1262
            lco_tree.branch.lock_write()
 
1263
            lco_tree.unlock()
1418
1264
        # L U L
1419
1265
        lco_tree.lock_write()
1420
1266
        lco_tree.branch.unlock()
1421
1267
        lco_tree.branch.repository.lock_write()
1422
 
        out, err = self.runbzr('info tree/lightcheckout')
1423
 
        self.assertEqualDiff(
1424
 
"""Location:
1425
 
  light checkout root: %s
1426
 
   checkout of branch: %s
1427
 
 
1428
 
Format:
1429
 
       control: Meta directory format 1
1430
 
  working tree: Working tree format 3
1431
 
        branch: Branch format 5
1432
 
    repository: %s
1433
 
 
1434
 
Lock status:
1435
 
  working tree: locked
1436
 
        branch: unlocked
1437
 
    repository: locked
1438
 
 
1439
 
In the working tree:
1440
 
         0 unchanged
1441
 
         0 modified
1442
 
         0 added
1443
 
         0 removed
1444
 
         0 renamed
1445
 
         0 unknown
1446
 
         0 ignored
1447
 
         0 versioned subdirectories
1448
 
 
1449
 
Branch history:
1450
 
         0 revisions
1451
 
 
1452
 
Revision store:
1453
 
         0 revisions
1454
 
         0 KiB
1455
 
""" % (lco_tree.bzrdir.root_transport.base,
1456
 
       lco_tree.branch.bzrdir.root_transport.base,
1457
 
       lco_tree.branch.repository._format.get_format_description(),
1458
 
       ), out)
1459
 
        self.assertEqual('', err)
1460
 
        lco_tree.branch.repository.unlock()
1461
 
        lco_tree.branch.lock_write()
1462
 
        lco_tree.unlock()
 
1268
        try:
 
1269
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1270
            lco_tree,
 
1271
            tree_locked=True,
 
1272
            repo_locked=True)
 
1273
        finally:
 
1274
            lco_tree.branch.repository.unlock()
 
1275
            lco_tree.branch.lock_write()
 
1276
            lco_tree.unlock()
1463
1277
        # U L U
1464
1278
        lco_tree.branch.lock_write()
1465
1279
        lco_tree.branch.repository.unlock()
1466
 
        out, err = self.runbzr('info tree/lightcheckout')
1467
 
        self.assertEqualDiff(
1468
 
"""Location:
1469
 
  light checkout root: %s
1470
 
   checkout of branch: %s
1471
 
 
1472
 
Format:
1473
 
       control: Meta directory format 1
1474
 
  working tree: Working tree format 3
1475
 
        branch: Branch format 5
1476
 
    repository: %s
1477
 
 
1478
 
Lock status:
1479
 
  working tree: unlocked
1480
 
        branch: locked
1481
 
    repository: unlocked
1482
 
 
1483
 
In the working tree:
1484
 
         0 unchanged
1485
 
         0 modified
1486
 
         0 added
1487
 
         0 removed
1488
 
         0 renamed
1489
 
         0 unknown
1490
 
         0 ignored
1491
 
         0 versioned subdirectories
1492
 
 
1493
 
Branch history:
1494
 
         0 revisions
1495
 
 
1496
 
Revision store:
1497
 
         0 revisions
1498
 
         0 KiB
1499
 
""" % (lco_tree.bzrdir.root_transport.base,
1500
 
       lco_tree.branch.bzrdir.root_transport.base,
1501
 
       lco_tree.branch.repository._format.get_format_description(),
1502
 
       ), out)
1503
 
        self.assertEqual('', err)
1504
 
        lco_tree.branch.repository.lock_write()
1505
 
        lco_tree.branch.unlock()
 
1280
        try:
 
1281
            self.assertCheckoutStatusOutput('tree/lightcheckout',
 
1282
            lco_tree,
 
1283
            branch_locked=True)
 
1284
        finally:
 
1285
            lco_tree.branch.repository.lock_write()
 
1286
            lco_tree.branch.unlock()
1506
1287
 
1507
1288
    def test_info_locking_oslocks(self):
 
1289
        if sys.platform == "win32":
 
1290
            raise TestSkipped("don't use oslocks on win32 in unix manner")
 
1291
 
1508
1292
        tree = self.make_branch_and_tree('branch',
1509
1293
                                         format=bzrlib.bzrdir.BzrDirFormat6())
1510
1294