~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Aaron Bentley
  • Date: 2006-10-25 15:07:21 UTC
  • mfrom: (2095 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2098.
  • Revision ID: abentley@panoramicfeedback.com-20061025150721-71290b10eff4e691
Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
 
36
36
 
37
37
sample_long_alias="log -r-15..-1 --line"
38
 
sample_config_text = u"""
39
 
[DEFAULT]
40
 
email=Erik B\u00e5gfors <erik@bagfors.nu>
41
 
editor=vim
42
 
gpg_signing_command=gnome-gpg
43
 
log_format=short
44
 
user_global_option=something
45
 
[ALIASES]
46
 
h=help
47
 
ll=""" + sample_long_alias + "\n"
48
 
 
49
 
 
50
 
sample_always_signatures = """
51
 
[DEFAULT]
52
 
check_signatures=ignore
53
 
create_signatures=always
54
 
"""
55
 
 
56
 
sample_ignore_signatures = """
57
 
[DEFAULT]
58
 
check_signatures=require
59
 
create_signatures=never
60
 
"""
61
 
 
62
 
sample_maybe_signatures = """
63
 
[DEFAULT]
64
 
check_signatures=ignore
65
 
create_signatures=when-required
66
 
"""
67
 
 
68
 
sample_branches_text = """
69
 
[http://www.example.com]
70
 
# Top level policy
71
 
email=Robert Collins <robertc@example.org>
72
 
normal_option = normal
73
 
appendpath_option = append
74
 
appendpath_option:policy = appendpath
75
 
norecurse_option = norecurse
76
 
norecurse_option:policy = norecurse
77
 
[http://www.example.com/ignoreparent]
78
 
# different project: ignore parent dir config
79
 
ignore_parents=true
80
 
[http://www.example.com/norecurse]
81
 
# configuration items that only apply to this dir
82
 
recurse=false
83
 
normal_option = norecurse
84
 
[http://www.example.com/dir]
85
 
appendpath_option = normal
86
 
[/b/]
87
 
check_signatures=require
88
 
# test trailing / matching with no children
89
 
[/a/]
90
 
check_signatures=check-available
91
 
gpg_signing_command=false
92
 
user_local_option=local
93
 
# test trailing / matching
94
 
[/a/*]
95
 
#subdirs will match but not the parent
96
 
[/a/c]
97
 
check_signatures=ignore
98
 
post_commit=bzrlib.tests.test_config.post_commit
99
 
#testing explicit beats globs
100
 
"""
 
38
sample_config_text = ("[DEFAULT]\n"
 
39
                      u"email=Erik B\u00e5gfors <erik@bagfors.nu>\n"
 
40
                      "editor=vim\n"
 
41
                      "gpg_signing_command=gnome-gpg\n"
 
42
                      "log_format=short\n"
 
43
                      "user_global_option=something\n"
 
44
                      "[ALIASES]\n"
 
45
                      "h=help\n"
 
46
                      "ll=" + sample_long_alias + "\n")
 
47
 
 
48
 
 
49
sample_always_signatures = ("[DEFAULT]\n"
 
50
                            "check_signatures=ignore\n"
 
51
                            "create_signatures=always")
 
52
 
 
53
 
 
54
sample_ignore_signatures = ("[DEFAULT]\n"
 
55
                            "check_signatures=require\n"
 
56
                            "create_signatures=never")
 
57
 
 
58
 
 
59
sample_maybe_signatures = ("[DEFAULT]\n"
 
60
                            "check_signatures=ignore\n"
 
61
                            "create_signatures=when-required")
 
62
 
 
63
 
 
64
sample_branches_text = ("[http://www.example.com]\n"
 
65
                        "# Top level policy\n"
 
66
                        "email=Robert Collins <robertc@example.org>\n"
 
67
                        "[http://www.example.com/ignoreparent]\n"
 
68
                        "# different project: ignore parent dir config\n"
 
69
                        "ignore_parents=true\n"
 
70
                        "[http://www.example.com/norecurse]\n"
 
71
                        "# configuration items that only apply to this dir\n"
 
72
                        "recurse=false\n"
 
73
                        "[/b/]\n"
 
74
                        "check_signatures=require\n"
 
75
                        "# test trailing / matching with no children\n"
 
76
                        "[/a/]\n"
 
77
                        "check_signatures=check-available\n"
 
78
                        "gpg_signing_command=false\n"
 
79
                        "user_local_option=local\n"
 
80
                        "# test trailing / matching\n"
 
81
                        "[/a/*]\n"
 
82
                        "#subdirs will match but not the parent\n"
 
83
                        "[/a/c]\n"
 
84
                        "check_signatures=ignore\n"
 
85
                        "post_commit=bzrlib.tests.test_config.post_commit\n"
 
86
                        "#testing explicit beats globs\n")
 
87
 
101
88
 
102
89
 
103
90
class InstrumentedConfigObj(object):
117
104
    def __setitem__(self, key, value):
118
105
        self._calls.append(('__setitem__', key, value))
119
106
 
120
 
    def __delitem__(self, key):
121
 
        self._calls.append(('__delitem__', key))
122
 
 
123
 
    def keys(self):
124
 
        self._calls.append(('keys',))
125
 
        return []
126
 
 
127
107
    def write(self, arg):
128
108
        self._calls.append(('write',))
129
109
 
130
 
    def as_bool(self, value):
131
 
        self._calls.append(('as_bool', value))
132
 
        return False
133
 
 
134
 
    def get_value(self, section, name):
135
 
        self._calls.append(('get_value', section, name))
136
 
        return None
137
 
 
138
110
 
139
111
class FakeBranch(object):
140
112
 
269
241
 
270
242
    def setUp(self):
271
243
        super(TestConfigPath, self).setUp()
 
244
        self.old_home = os.environ.get('HOME', None)
 
245
        self.old_appdata = os.environ.get('APPDATA', None)
272
246
        os.environ['HOME'] = '/home/bogus'
273
 
        if sys.platform == 'win32':
274
 
            os.environ['BZR_HOME'] = \
275
 
                r'C:\Documents and Settings\bogus\Application Data'
 
247
        os.environ['APPDATA'] = \
 
248
            r'C:\Documents and Settings\bogus\Application Data'
276
249
 
 
250
    def tearDown(self):
 
251
        if self.old_home is None:
 
252
            del os.environ['HOME']
 
253
        else:
 
254
            os.environ['HOME'] = self.old_home
 
255
        if self.old_appdata is None:
 
256
            del os.environ['APPDATA']
 
257
        else:
 
258
            os.environ['APPDATA'] = self.old_appdata
 
259
        super(TestConfigPath, self).tearDown()
 
260
    
277
261
    def test_config_dir(self):
278
262
        if sys.platform == 'win32':
279
263
            self.assertEqual(config.config_dir(), 
401
385
 
402
386
    def test_config_creates_local(self):
403
387
        """Creating a new entry in config uses a local path."""
404
 
        branch = self.make_branch('branch', format='knit')
 
388
        branch = self.make_branch('branch')
405
389
        branch.set_push_location('http://foobar')
406
390
        locations = config.locations_config_filename()
407
391
        local_path = osutils.getcwd().encode('utf8')
408
392
        # Surprisingly ConfigObj doesn't create a trailing newline
409
393
        self.check_file_contents(locations,
410
 
            '[%s/branch]\npush_location = http://foobar\npush_location:policy = norecurse' % (local_path,))
411
 
 
412
 
    def test_autonick_urlencoded(self):
413
 
        b = self.make_branch('!repo')
414
 
        self.assertEqual('!repo', b.get_config().get_nickname())
 
394
            '[%s/branch]\npush_location = http://foobar' % (local_path,))
415
395
 
416
396
 
417
397
class TestGlobalConfigItems(TestCase):
586
566
        self.assertEqual([('http://www.example.com/ignoreparent', 'childbranch')],
587
567
                         self.my_location_config._get_matching_sections())
588
568
 
 
569
    def test__get_matching_sections_norecurse(self):
 
570
        self.get_branch_config('http://www.example.com/norecurse')
 
571
        self.assertEqual([('http://www.example.com/norecurse', ''),
 
572
                          ('http://www.example.com', 'norecurse')],
 
573
                         self.my_location_config._get_matching_sections())
 
574
 
 
575
    def test__get_matching_sections_norecurse_subdir(self):
 
576
        self.get_branch_config(
 
577
            'http://www.example.com/norecurse/childbranch')
 
578
        self.assertEqual([('http://www.example.com', 'norecurse/childbranch')],
 
579
                         self.my_location_config._get_matching_sections())
 
580
 
589
581
    def test__get_matching_sections_subdir_trailing_slash(self):
590
582
        self.get_branch_config('/b')
591
583
        self.assertEqual([('/b/', '')],
615
607
        self.assertEqual([('/a/c', ''), ('/a/*', ''), ('/a/', 'c')],
616
608
                         self.my_location_config._get_matching_sections())
617
609
 
618
 
    def test__get_option_policy_normal(self):
619
 
        self.get_branch_config('http://www.example.com')
620
 
        self.assertEqual(
621
 
            self.my_location_config._get_config_policy(
622
 
            'http://www.example.com', 'normal_option'),
623
 
            config.POLICY_NONE)
624
 
 
625
 
    def test__get_option_policy_norecurse(self):
626
 
        self.get_branch_config('http://www.example.com')
627
 
        self.assertEqual(
628
 
            self.my_location_config._get_option_policy(
629
 
            'http://www.example.com', 'norecurse_option'),
630
 
            config.POLICY_NORECURSE)
631
 
        # Test old recurse=False setting:
632
 
        self.assertEqual(
633
 
            self.my_location_config._get_option_policy(
634
 
            'http://www.example.com/norecurse', 'normal_option'),
635
 
            config.POLICY_NORECURSE)
636
 
 
637
 
    def test__get_option_policy_normal(self):
638
 
        self.get_branch_config('http://www.example.com')
639
 
        self.assertEqual(
640
 
            self.my_location_config._get_option_policy(
641
 
            'http://www.example.com', 'appendpath_option'),
642
 
            config.POLICY_APPENDPATH)
643
 
 
644
610
    def test_location_without_username(self):
645
611
        self.get_branch_config('http://www.example.com/ignoreparent')
646
612
        self.assertEqual(u'Erik B\u00e5gfors <erik@bagfors.nu>',
698
664
        self.assertEqual('local',
699
665
                         self.my_config.get_user_option('user_local_option'))
700
666
 
701
 
    def test_get_user_option_appendpath(self):
702
 
        # returned as is for the base path:
703
 
        self.get_branch_config('http://www.example.com')
704
 
        self.assertEqual('append',
705
 
                         self.my_config.get_user_option('appendpath_option'))
706
 
        # Extra path components get appended:
707
 
        self.get_branch_config('http://www.example.com/a/b/c')
708
 
        self.assertEqual('append/a/b/c',
709
 
                         self.my_config.get_user_option('appendpath_option'))
710
 
        # Overriden for http://www.example.com/dir, where it is a
711
 
        # normal option:
712
 
        self.get_branch_config('http://www.example.com/dir/a/b/c')
713
 
        self.assertEqual('normal',
714
 
                         self.my_config.get_user_option('appendpath_option'))
715
 
 
716
 
    def test_get_user_option_norecurse(self):
717
 
        self.get_branch_config('http://www.example.com')
718
 
        self.assertEqual('norecurse',
719
 
                         self.my_config.get_user_option('norecurse_option'))
720
 
        self.get_branch_config('http://www.example.com/dir')
721
 
        self.assertEqual(None,
722
 
                         self.my_config.get_user_option('norecurse_option'))
723
 
        # http://www.example.com/norecurse is a recurse=False section
724
 
        # that redefines normal_option.  Subdirectories do not pick up
725
 
        # this redefinition.
726
 
        self.get_branch_config('http://www.example.com/norecurse')
727
 
        self.assertEqual('norecurse',
728
 
                         self.my_config.get_user_option('normal_option'))
729
 
        self.get_branch_config('http://www.example.com/norecurse/subdir')
730
 
        self.assertEqual('normal',
731
 
                         self.my_config.get_user_option('normal_option'))
732
 
 
733
 
    def test_set_user_option_norecurse(self):
734
 
        self.get_branch_config('http://www.example.com')
735
 
        self.my_config.set_user_option('foo', 'bar',
736
 
                                       store=config.STORE_LOCATION_NORECURSE)
737
 
        self.assertEqual(
738
 
            self.my_location_config._get_option_policy(
739
 
            'http://www.example.com', 'foo'),
740
 
            config.POLICY_NORECURSE)
741
 
 
742
 
    def test_set_user_option_appendpath(self):
743
 
        self.get_branch_config('http://www.example.com')
744
 
        self.my_config.set_user_option('foo', 'bar',
745
 
                                       store=config.STORE_LOCATION_APPENDPATH)
746
 
        self.assertEqual(
747
 
            self.my_location_config._get_option_policy(
748
 
            'http://www.example.com', 'foo'),
749
 
            config.POLICY_APPENDPATH)
750
 
 
751
 
    def test_set_user_option_change_policy(self):
752
 
        self.get_branch_config('http://www.example.com')
753
 
        self.my_config.set_user_option('norecurse_option', 'normal',
754
 
                                       store=config.STORE_LOCATION)
755
 
        self.assertEqual(
756
 
            self.my_location_config._get_option_policy(
757
 
            'http://www.example.com', 'norecurse_option'),
758
 
            config.POLICY_NONE)
759
 
 
760
 
    def test_set_user_option_recurse_false_section(self):
761
 
        # The following section has recurse=False set.  The test is to
762
 
        # make sure that a normal option can be added to the section,
763
 
        # converting recurse=False to the norecurse policy.
764
 
        self.get_branch_config('http://www.example.com/norecurse')
765
 
        self.callDeprecated(['The recurse option is deprecated as of 0.14.  '
766
 
                             'The section "http://www.example.com/norecurse" '
767
 
                             'has been converted to use policies.'],
768
 
                            self.my_config.set_user_option,
769
 
                            'foo', 'bar', store=config.STORE_LOCATION)
770
 
        self.assertEqual(
771
 
            self.my_location_config._get_option_policy(
772
 
            'http://www.example.com/norecurse', 'foo'),
773
 
            config.POLICY_NONE)
774
 
        # The previously existing option is still norecurse:
775
 
        self.assertEqual(
776
 
            self.my_location_config._get_option_policy(
777
 
            'http://www.example.com/norecurse', 'normal_option'),
778
 
            config.POLICY_NORECURSE)
779
 
        
780
 
 
781
667
    def test_post_commit_default(self):
782
668
        self.get_branch_config('/a/c')
783
669
        self.assertEqual('bzrlib.tests.test_config.post_commit',
810
696
 
811
697
        os.mkdir = checked_mkdir
812
698
        try:
813
 
            self.callDeprecated(['The recurse option is deprecated as of '
814
 
                                 '0.14.  The section "/a/c" has been '
815
 
                                 'converted to use policies.'],
816
 
                                self.my_config.set_user_option,
817
 
                                'foo', 'bar', store=config.STORE_LOCATION)
 
699
            self.my_config.set_user_option('foo', 'bar', local=True)
818
700
        finally:
819
701
            os.mkdir = real_mkdir
820
702
 
824
706
                          ('__setitem__', '/a/c', {}),
825
707
                          ('__getitem__', '/a/c'),
826
708
                          ('__setitem__', 'foo', 'bar'),
827
 
                          ('__getitem__', '/a/c'),
828
 
                          ('as_bool', 'recurse'),
829
 
                          ('__getitem__', '/a/c'),
830
 
                          ('__delitem__', 'recurse'),
831
 
                          ('__getitem__', '/a/c'),
832
 
                          ('keys',),
833
 
                          ('__getitem__', '/a/c'),
834
 
                          ('__contains__', 'foo:policy'),
835
709
                          ('write',)],
836
710
                         record._calls[1:])
837
711
 
843
717
            self.my_config.branch.control_files.files['branch.conf'], 
844
718
            'foo = bar')
845
719
        self.assertEqual(self.my_config.get_user_option('foo'), 'bar')
846
 
        self.my_config.set_user_option('foo', 'baz',
847
 
                                       store=config.STORE_LOCATION)
 
720
        self.my_config.set_user_option('foo', 'baz', local=True)
848
721
        self.assertEqual(self.my_config.get_user_option('foo'), 'baz')
849
722
        self.my_config.set_user_option('foo', 'qux')
850
723
        self.assertEqual(self.my_config.get_user_option('foo'), 'baz')
948
821
        # post-commit is ignored when bresent in branch data
949
822
        self.assertEqual('bzrlib.tests.test_config.post_commit',
950
823
                         my_config.post_commit())
951
 
        my_config.set_user_option('post_commit', 'rmtree_root',
952
 
                                  store=config.STORE_LOCATION)
 
824
        my_config.set_user_option('post_commit', 'rmtree_root', local=True)
953
825
        self.assertEqual('rmtree_root', my_config.post_commit())
954
826
 
955
827
    def test_config_precedence(self):