Mercurial > hg > mercurial-crew-with-dirclash
comparison tests/test-trusted.py @ 3538:9b52239dc740
save settings from untrusted config files in a separate configparser
This untrusted configparser is a superset of the trusted configparser,
so that interpolation still works.
Also add an "untrusted" argument to ui.config* to allow querying
ui.ucdata.
With --debug, we print a warning when we read an untrusted config
file, and when we try to access a trusted setting that has one value
in the trusted configparser and another in the untrusted configparser.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 26 Oct 2006 19:25:45 +0200 |
parents | 3b07e223534b |
children | 1a0fa3914c46 |
comparison
equal
deleted
inserted
replaced
3537:3b07e223534b | 3538:9b52239dc740 |
---|---|
7 from mercurial import ui, util | 7 from mercurial import ui, util |
8 | 8 |
9 hgrc = os.environ['HGRCPATH'] | 9 hgrc = os.environ['HGRCPATH'] |
10 | 10 |
11 def testui(user='foo', group='bar', tusers=(), tgroups=(), | 11 def testui(user='foo', group='bar', tusers=(), tgroups=(), |
12 cuser='foo', cgroup='bar', debug=False): | 12 cuser='foo', cgroup='bar', debug=False, silent=False): |
13 # user, group => owners of the file | 13 # user, group => owners of the file |
14 # tusers, tgroups => trusted users/groups | 14 # tusers, tgroups => trusted users/groups |
15 # cuser, cgroup => user/group of the current process | 15 # cuser, cgroup => user/group of the current process |
16 | 16 |
17 # write a global hgrc with the list of trusted users/groups and | 17 # write a global hgrc with the list of trusted users/groups and |
54 | 54 |
55 parentui = ui.ui() | 55 parentui = ui.ui() |
56 parentui.updateopts(debug=debug) | 56 parentui.updateopts(debug=debug) |
57 u = ui.ui(parentui=parentui) | 57 u = ui.ui(parentui=parentui) |
58 u.readconfig('.hg/hgrc') | 58 u.readconfig('.hg/hgrc') |
59 if silent: | |
60 return u | |
61 print 'trusted' | |
59 for name, path in u.configitems('paths'): | 62 for name, path in u.configitems('paths'): |
60 print ' ', name, '=', path | 63 print ' ', name, '=', path |
64 print 'untrusted' | |
65 for name, path in u.configitems('paths', untrusted=True): | |
66 print '.', | |
67 u.config('paths', name) # warning with debug=True | |
68 print '.', | |
69 u.config('paths', name, untrusted=True) # no warnings | |
70 print name, '=', path | |
61 print | 71 print |
62 | 72 |
63 return u | 73 return u |
64 | 74 |
65 os.mkdir('repo') | 75 os.mkdir('repo') |
66 os.chdir('repo') | 76 os.chdir('repo') |
67 os.mkdir('.hg') | 77 os.mkdir('.hg') |
68 f = open('.hg/hgrc', 'w') | 78 f = open('.hg/hgrc', 'w') |
69 f.write('[paths]\n') | 79 f.write('[paths]\n') |
70 f.write('local = /another/path\n\n') | 80 f.write('local = /another/path\n\n') |
81 f.write('interpolated = %(global)s%(local)s\n\n') | |
71 f.close() | 82 f.close() |
72 | 83 |
73 #print '# Everything is run by user foo, group bar\n' | 84 #print '# Everything is run by user foo, group bar\n' |
74 | 85 |
75 # same user, same group | 86 # same user, same group |
109 testui(user='abc', group='def', tusers=['foo', 'xyz', 'bleh'], | 120 testui(user='abc', group='def', tusers=['foo', 'xyz', 'bleh'], |
110 tgroups=['bar', 'def', 'baz', 'qux']) | 121 tgroups=['bar', 'def', 'baz', 'qux']) |
111 | 122 |
112 print "# Can't figure out the name of the user running this process" | 123 print "# Can't figure out the name of the user running this process" |
113 testui(user='abc', group='def', cuser=None) | 124 testui(user='abc', group='def', cuser=None) |
125 | |
126 print "# prints debug warnings" | |
127 u = testui(user='abc', group='def', cuser='foo', debug=True) | |
128 | |
129 print "# ui.readsections" | |
130 filename = 'foobar' | |
131 f = open(filename, 'w') | |
132 f.write('[foobar]\n') | |
133 f.write('baz = quux\n') | |
134 f.close() | |
135 u.readsections(filename, 'foobar') | |
136 print u.config('foobar', 'baz') | |
137 | |
138 print | |
139 print "# read trusted, untrusted, new ui, trusted" | |
140 u = ui.ui() | |
141 u.updateopts(debug=True) | |
142 u.readconfig(filename) | |
143 u2 = ui.ui(parentui=u) | |
144 def username(uid=None): | |
145 return 'foo' | |
146 util.username = username | |
147 u2.readconfig('.hg/hgrc') | |
148 print 'trusted:' | |
149 print u2.config('foobar', 'baz') | |
150 print u2.config('paths', 'interpolated') | |
151 print 'untrusted:' | |
152 print u2.config('foobar', 'baz', untrusted=True) | |
153 print u2.config('paths', 'interpolated', untrusted=True) | |
154 | |
155 print | |
156 print "# error handling" | |
157 | |
158 def assertraises(f, exc=util.Abort): | |
159 try: | |
160 f() | |
161 except exc, inst: | |
162 print 'raised', inst.__class__.__name__ | |
163 else: | |
164 print 'no exception?!' | |
165 | |
166 print "# file doesn't exist" | |
167 os.unlink('.hg/hgrc') | |
168 assert not os.path.exists('.hg/hgrc') | |
169 testui(debug=True, silent=True) | |
170 testui(user='abc', group='def', debug=True, silent=True) | |
171 | |
172 print | |
173 print "# parse error" | |
174 f = open('.hg/hgrc', 'w') | |
175 f.write('foo = bar') | |
176 f.close() | |
177 testui(user='abc', group='def', silent=True) | |
178 assertraises(lambda: testui(debug=True, silent=True)) | |
179 | |
180 print | |
181 print "# interpolation error" | |
182 f = open('.hg/hgrc', 'w') | |
183 f.write('[foo]\n') | |
184 f.write('bar = %(') | |
185 f.close() | |
186 u = testui(debug=True, silent=True) | |
187 print '# regular config:' | |
188 print ' trusted', | |
189 assertraises(lambda: u.config('foo', 'bar')) | |
190 print 'untrusted', | |
191 assertraises(lambda: u.config('foo', 'bar', untrusted=True)) | |
192 | |
193 u = testui(user='abc', group='def', debug=True, silent=True) | |
194 print ' trusted ', | |
195 print u.config('foo', 'bar') | |
196 print 'untrusted', | |
197 assertraises(lambda: u.config('foo', 'bar', untrusted=True)) | |
198 | |
199 print '# configitems:' | |
200 print ' trusted ', | |
201 print u.configitems('foo') | |
202 print 'untrusted', | |
203 assertraises(lambda: u.configitems('foo', untrusted=True)) | |
204 |