##// END OF EJS Templates
configitems: add a devel warning for extensions items overiding core one...
marmoute -
r33128:bf1292c0 default
parent child Browse files
Show More
@@ -1,62 +1,70 b''
1 # configitems.py - centralized declaration of configuration option
1 # configitems.py - centralized declaration of configuration option
2 #
2 #
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
3 # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 from __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import functools
10 import functools
11
11
12 from . import (
12 from . import (
13 error,
13 error,
14 )
14 )
15
15
16 def loadconfigtable(ui, extname, configtable):
16 def loadconfigtable(ui, extname, configtable):
17 """update config item known to the ui with the extension ones"""
17 """update config item known to the ui with the extension ones"""
18 for section, items in configtable.items():
18 for section, items in configtable.items():
19 ui._knownconfig.setdefault(section, {}).update(items)
19 knownitems = ui._knownconfig.setdefault(section, {})
20 knownkeys = set(knownitems)
21 newkeys = set(items)
22 for key in sorted(knownkeys & newkeys):
23 msg = "extension '%s' overwrite config item '%s.%s'"
24 msg %= (extname, section, key)
25 ui.develwarn(msg, config='warn-config')
26
27 knownitems.update(items)
20
28
21 class configitem(object):
29 class configitem(object):
22 """represent a known config item
30 """represent a known config item
23
31
24 :section: the official config section where to find this item,
32 :section: the official config section where to find this item,
25 :name: the official name within the section,
33 :name: the official name within the section,
26 :default: default value for this item,
34 :default: default value for this item,
27 """
35 """
28
36
29 def __init__(self, section, name, default=None):
37 def __init__(self, section, name, default=None):
30 self.section = section
38 self.section = section
31 self.name = name
39 self.name = name
32 self.default = default
40 self.default = default
33
41
34 coreitems = {}
42 coreitems = {}
35
43
36 def _register(configtable, *args, **kwargs):
44 def _register(configtable, *args, **kwargs):
37 item = configitem(*args, **kwargs)
45 item = configitem(*args, **kwargs)
38 section = configtable.setdefault(item.section, {})
46 section = configtable.setdefault(item.section, {})
39 if item.name in section:
47 if item.name in section:
40 msg = "duplicated config item registration for '%s.%s'"
48 msg = "duplicated config item registration for '%s.%s'"
41 raise error.ProgrammingError(msg % (item.section, item.name))
49 raise error.ProgrammingError(msg % (item.section, item.name))
42 section[item.name] = item
50 section[item.name] = item
43
51
44 # Registering actual config items
52 # Registering actual config items
45
53
46 def getitemregister(configtable):
54 def getitemregister(configtable):
47 return functools.partial(_register, configtable)
55 return functools.partial(_register, configtable)
48
56
49 coreconfigitem = getitemregister(coreitems)
57 coreconfigitem = getitemregister(coreitems)
50
58
51 coreconfigitem('patch', 'fuzz',
59 coreconfigitem('patch', 'fuzz',
52 default=2,
60 default=2,
53 )
61 )
54 coreconfigitem('ui', 'clonebundleprefers',
62 coreconfigitem('ui', 'clonebundleprefers',
55 default=[],
63 default=[],
56 )
64 )
57 coreconfigitem('ui', 'interactive',
65 coreconfigitem('ui', 'interactive',
58 default=None,
66 default=None,
59 )
67 )
60 coreconfigitem('ui', 'quiet',
68 coreconfigitem('ui', 'quiet',
61 default=False,
69 default=False,
62 )
70 )
@@ -1,216 +1,228 b''
1
1
2 $ cat << EOF > buggylocking.py
2 $ cat << EOF > buggylocking.py
3 > """A small extension that tests our developer warnings
3 > """A small extension that tests our developer warnings
4 > """
4 > """
5 >
5 >
6 > from mercurial import error, registrar, repair, util
6 > from mercurial import error, registrar, repair, util
7 >
7 >
8 > cmdtable = {}
8 > cmdtable = {}
9 > command = registrar.command(cmdtable)
9 > command = registrar.command(cmdtable)
10 >
10 >
11 > @command(b'buggylocking', [], '')
11 > @command(b'buggylocking', [], '')
12 > def buggylocking(ui, repo):
12 > def buggylocking(ui, repo):
13 > lo = repo.lock()
13 > lo = repo.lock()
14 > wl = repo.wlock()
14 > wl = repo.wlock()
15 > wl.release()
15 > wl.release()
16 > lo.release()
16 > lo.release()
17 >
17 >
18 > @command(b'buggytransaction', [], '')
18 > @command(b'buggytransaction', [], '')
19 > def buggylocking(ui, repo):
19 > def buggylocking(ui, repo):
20 > tr = repo.transaction('buggy')
20 > tr = repo.transaction('buggy')
21 > # make sure we rollback the transaction as we don't want to rely on the__del__
21 > # make sure we rollback the transaction as we don't want to rely on the__del__
22 > tr.release()
22 > tr.release()
23 >
23 >
24 > @command(b'properlocking', [], '')
24 > @command(b'properlocking', [], '')
25 > def properlocking(ui, repo):
25 > def properlocking(ui, repo):
26 > """check that reentrance is fine"""
26 > """check that reentrance is fine"""
27 > wl = repo.wlock()
27 > wl = repo.wlock()
28 > lo = repo.lock()
28 > lo = repo.lock()
29 > tr = repo.transaction('proper')
29 > tr = repo.transaction('proper')
30 > tr2 = repo.transaction('proper')
30 > tr2 = repo.transaction('proper')
31 > lo2 = repo.lock()
31 > lo2 = repo.lock()
32 > wl2 = repo.wlock()
32 > wl2 = repo.wlock()
33 > wl2.release()
33 > wl2.release()
34 > lo2.release()
34 > lo2.release()
35 > tr2.close()
35 > tr2.close()
36 > tr.close()
36 > tr.close()
37 > lo.release()
37 > lo.release()
38 > wl.release()
38 > wl.release()
39 >
39 >
40 > @command(b'nowaitlocking', [], '')
40 > @command(b'nowaitlocking', [], '')
41 > def nowaitlocking(ui, repo):
41 > def nowaitlocking(ui, repo):
42 > lo = repo.lock()
42 > lo = repo.lock()
43 > wl = repo.wlock(wait=False)
43 > wl = repo.wlock(wait=False)
44 > wl.release()
44 > wl.release()
45 > lo.release()
45 > lo.release()
46 >
46 >
47 > @command(b'stripintr', [], '')
47 > @command(b'stripintr', [], '')
48 > def stripintr(ui, repo):
48 > def stripintr(ui, repo):
49 > lo = repo.lock()
49 > lo = repo.lock()
50 > tr = repo.transaction('foobar')
50 > tr = repo.transaction('foobar')
51 > try:
51 > try:
52 > repair.strip(repo.ui, repo, [repo['.'].node()])
52 > repair.strip(repo.ui, repo, [repo['.'].node()])
53 > finally:
53 > finally:
54 > lo.release()
54 > lo.release()
55 > @command(b'oldanddeprecated', [], '')
55 > @command(b'oldanddeprecated', [], '')
56 > def oldanddeprecated(ui, repo):
56 > def oldanddeprecated(ui, repo):
57 > """test deprecation warning API"""
57 > """test deprecation warning API"""
58 > def foobar(ui):
58 > def foobar(ui):
59 > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337')
59 > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337')
60 > foobar(ui)
60 > foobar(ui)
61 > @command(b'nouiwarning', [], '')
61 > @command(b'nouiwarning', [], '')
62 > def nouiwarning(ui, repo):
62 > def nouiwarning(ui, repo):
63 > util.nouideprecwarn('this is a test', '13.37')
63 > util.nouideprecwarn('this is a test', '13.37')
64 > @command(b'programmingerror', [], '')
64 > @command(b'programmingerror', [], '')
65 > def programmingerror(ui, repo):
65 > def programmingerror(ui, repo):
66 > raise error.ProgrammingError('something went wrong', hint='try again')
66 > raise error.ProgrammingError('something went wrong', hint='try again')
67 > EOF
67 > EOF
68
68
69 $ cat << EOF >> $HGRCPATH
69 $ cat << EOF >> $HGRCPATH
70 > [extensions]
70 > [extensions]
71 > buggylocking=$TESTTMP/buggylocking.py
71 > buggylocking=$TESTTMP/buggylocking.py
72 > mock=$TESTDIR/mockblackbox.py
72 > mock=$TESTDIR/mockblackbox.py
73 > blackbox=
73 > blackbox=
74 > [devel]
74 > [devel]
75 > all-warnings=1
75 > all-warnings=1
76 > EOF
76 > EOF
77
77
78 $ hg init lock-checker
78 $ hg init lock-checker
79 $ cd lock-checker
79 $ cd lock-checker
80 $ hg buggylocking
80 $ hg buggylocking
81 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
81 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
82 $ cat << EOF >> $HGRCPATH
82 $ cat << EOF >> $HGRCPATH
83 > [devel]
83 > [devel]
84 > all=0
84 > all=0
85 > check-locks=1
85 > check-locks=1
86 > EOF
86 > EOF
87 $ hg buggylocking
87 $ hg buggylocking
88 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
88 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
89 $ hg buggylocking --traceback
89 $ hg buggylocking --traceback
90 devel-warn: "wlock" acquired after "lock" at:
90 devel-warn: "wlock" acquired after "lock" at:
91 */hg:* in * (glob)
91 */hg:* in * (glob)
92 */mercurial/dispatch.py:* in run (glob)
92 */mercurial/dispatch.py:* in run (glob)
93 */mercurial/dispatch.py:* in dispatch (glob)
93 */mercurial/dispatch.py:* in dispatch (glob)
94 */mercurial/dispatch.py:* in _runcatch (glob)
94 */mercurial/dispatch.py:* in _runcatch (glob)
95 */mercurial/dispatch.py:* in _callcatch (glob)
95 */mercurial/dispatch.py:* in _callcatch (glob)
96 */mercurial/scmutil.py* in callcatch (glob)
96 */mercurial/scmutil.py* in callcatch (glob)
97 */mercurial/dispatch.py:* in _runcatchfunc (glob)
97 */mercurial/dispatch.py:* in _runcatchfunc (glob)
98 */mercurial/dispatch.py:* in _dispatch (glob)
98 */mercurial/dispatch.py:* in _dispatch (glob)
99 */mercurial/dispatch.py:* in runcommand (glob)
99 */mercurial/dispatch.py:* in runcommand (glob)
100 */mercurial/dispatch.py:* in _runcommand (glob)
100 */mercurial/dispatch.py:* in _runcommand (glob)
101 */mercurial/dispatch.py:* in <lambda> (glob)
101 */mercurial/dispatch.py:* in <lambda> (glob)
102 */mercurial/util.py:* in check (glob)
102 */mercurial/util.py:* in check (glob)
103 $TESTTMP/buggylocking.py:* in buggylocking (glob)
103 $TESTTMP/buggylocking.py:* in buggylocking (glob)
104 $ hg properlocking
104 $ hg properlocking
105 $ hg nowaitlocking
105 $ hg nowaitlocking
106
106
107 $ echo a > a
107 $ echo a > a
108 $ hg add a
108 $ hg add a
109 $ hg commit -m a
109 $ hg commit -m a
110 $ hg stripintr 2>&1 | egrep -v '^(\*\*| )'
110 $ hg stripintr 2>&1 | egrep -v '^(\*\*| )'
111 Traceback (most recent call last):
111 Traceback (most recent call last):
112 mercurial.error.ProgrammingError: cannot strip from inside a transaction
112 mercurial.error.ProgrammingError: cannot strip from inside a transaction
113
113
114 $ hg oldanddeprecated
114 $ hg oldanddeprecated
115 devel-warn: foorbar is deprecated, go shopping
115 devel-warn: foorbar is deprecated, go shopping
116 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
116 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
117
117
118 $ hg oldanddeprecated --traceback
118 $ hg oldanddeprecated --traceback
119 devel-warn: foorbar is deprecated, go shopping
119 devel-warn: foorbar is deprecated, go shopping
120 (compatibility will be dropped after Mercurial-42.1337, update your code.) at:
120 (compatibility will be dropped after Mercurial-42.1337, update your code.) at:
121 */hg:* in <module> (glob)
121 */hg:* in <module> (glob)
122 */mercurial/dispatch.py:* in run (glob)
122 */mercurial/dispatch.py:* in run (glob)
123 */mercurial/dispatch.py:* in dispatch (glob)
123 */mercurial/dispatch.py:* in dispatch (glob)
124 */mercurial/dispatch.py:* in _runcatch (glob)
124 */mercurial/dispatch.py:* in _runcatch (glob)
125 */mercurial/dispatch.py:* in _callcatch (glob)
125 */mercurial/dispatch.py:* in _callcatch (glob)
126 */mercurial/scmutil.py* in callcatch (glob)
126 */mercurial/scmutil.py* in callcatch (glob)
127 */mercurial/dispatch.py:* in _runcatchfunc (glob)
127 */mercurial/dispatch.py:* in _runcatchfunc (glob)
128 */mercurial/dispatch.py:* in _dispatch (glob)
128 */mercurial/dispatch.py:* in _dispatch (glob)
129 */mercurial/dispatch.py:* in runcommand (glob)
129 */mercurial/dispatch.py:* in runcommand (glob)
130 */mercurial/dispatch.py:* in _runcommand (glob)
130 */mercurial/dispatch.py:* in _runcommand (glob)
131 */mercurial/dispatch.py:* in <lambda> (glob)
131 */mercurial/dispatch.py:* in <lambda> (glob)
132 */mercurial/util.py:* in check (glob)
132 */mercurial/util.py:* in check (glob)
133 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
133 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
134 $ hg blackbox -l 7
134 $ hg blackbox -l 7
135 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated
135 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated
136 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
136 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
137 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
137 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
138 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob)
138 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob)
139 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback
139 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback
140 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
140 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
141 (compatibility will be dropped after Mercurial-42.1337, update your code.) at:
141 (compatibility will be dropped after Mercurial-42.1337, update your code.) at:
142 */hg:* in <module> (glob)
142 */hg:* in <module> (glob)
143 */mercurial/dispatch.py:* in run (glob)
143 */mercurial/dispatch.py:* in run (glob)
144 */mercurial/dispatch.py:* in dispatch (glob)
144 */mercurial/dispatch.py:* in dispatch (glob)
145 */mercurial/dispatch.py:* in _runcatch (glob)
145 */mercurial/dispatch.py:* in _runcatch (glob)
146 */mercurial/dispatch.py:* in _callcatch (glob)
146 */mercurial/dispatch.py:* in _callcatch (glob)
147 */mercurial/scmutil.py* in callcatch (glob)
147 */mercurial/scmutil.py* in callcatch (glob)
148 */mercurial/dispatch.py:* in _runcatchfunc (glob)
148 */mercurial/dispatch.py:* in _runcatchfunc (glob)
149 */mercurial/dispatch.py:* in _dispatch (glob)
149 */mercurial/dispatch.py:* in _dispatch (glob)
150 */mercurial/dispatch.py:* in runcommand (glob)
150 */mercurial/dispatch.py:* in runcommand (glob)
151 */mercurial/dispatch.py:* in _runcommand (glob)
151 */mercurial/dispatch.py:* in _runcommand (glob)
152 */mercurial/dispatch.py:* in <lambda> (glob)
152 */mercurial/dispatch.py:* in <lambda> (glob)
153 */mercurial/util.py:* in check (glob)
153 */mercurial/util.py:* in check (glob)
154 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
154 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
155 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob)
155 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob)
156 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7
156 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7
157
157
158 Test programming error failure:
158 Test programming error failure:
159
159
160 $ hg buggytransaction 2>&1 | egrep -v '^ '
160 $ hg buggytransaction 2>&1 | egrep -v '^ '
161 ** Unknown exception encountered with possibly-broken third-party extension buggylocking
161 ** Unknown exception encountered with possibly-broken third-party extension buggylocking
162 ** which supports versions unknown of Mercurial.
162 ** which supports versions unknown of Mercurial.
163 ** Please disable buggylocking and try your action again.
163 ** Please disable buggylocking and try your action again.
164 ** If that fixes the bug please report it to the extension author.
164 ** If that fixes the bug please report it to the extension author.
165 ** Python * (glob)
165 ** Python * (glob)
166 ** Mercurial Distributed SCM (*) (glob)
166 ** Mercurial Distributed SCM (*) (glob)
167 ** Extensions loaded: * (glob)
167 ** Extensions loaded: * (glob)
168 ** ProgrammingError: transaction requires locking
168 ** ProgrammingError: transaction requires locking
169 Traceback (most recent call last):
169 Traceback (most recent call last):
170 mercurial.error.ProgrammingError: transaction requires locking
170 mercurial.error.ProgrammingError: transaction requires locking
171
171
172 $ hg programmingerror 2>&1 | egrep -v '^ '
172 $ hg programmingerror 2>&1 | egrep -v '^ '
173 ** Unknown exception encountered with possibly-broken third-party extension buggylocking
173 ** Unknown exception encountered with possibly-broken third-party extension buggylocking
174 ** which supports versions unknown of Mercurial.
174 ** which supports versions unknown of Mercurial.
175 ** Please disable buggylocking and try your action again.
175 ** Please disable buggylocking and try your action again.
176 ** If that fixes the bug please report it to the extension author.
176 ** If that fixes the bug please report it to the extension author.
177 ** Python * (glob)
177 ** Python * (glob)
178 ** Mercurial Distributed SCM (*) (glob)
178 ** Mercurial Distributed SCM (*) (glob)
179 ** Extensions loaded: * (glob)
179 ** Extensions loaded: * (glob)
180 ** ProgrammingError: something went wrong
180 ** ProgrammingError: something went wrong
181 ** (try again)
181 ** (try again)
182 Traceback (most recent call last):
182 Traceback (most recent call last):
183 mercurial.error.ProgrammingError: something went wrong
183 mercurial.error.ProgrammingError: something went wrong
184
184
185 Old style deprecation warning
185 Old style deprecation warning
186
186
187 $ hg nouiwarning
187 $ hg nouiwarning
188 $TESTTMP/buggylocking.py:61: DeprecationWarning: this is a test
188 $TESTTMP/buggylocking.py:61: DeprecationWarning: this is a test
189 (compatibility will be dropped after Mercurial-13.37, update your code.)
189 (compatibility will be dropped after Mercurial-13.37, update your code.)
190 util.nouideprecwarn('this is a test', '13.37')
190 util.nouideprecwarn('this is a test', '13.37')
191
191
192 (disabled outside of test run)
192 (disabled outside of test run)
193
193
194 $ HGEMITWARNINGS= hg nouiwarning
194 $ HGEMITWARNINGS= hg nouiwarning
195
195
196 Test warning on config option access and registration
196 Test warning on config option access and registration
197
197
198 $ cat << EOF > ${TESTTMP}/buggyconfig.py
198 $ cat << EOF > ${TESTTMP}/buggyconfig.py
199 > """A small extension that tests our developer warnings for config"""
199 > """A small extension that tests our developer warnings for config"""
200 >
200 >
201 > from mercurial import registrar
201 > from mercurial import registrar
202 >
202 >
203 > cmdtable = {}
203 > cmdtable = {}
204 > command = registrar.command(cmdtable)
204 > command = registrar.command(cmdtable)
205 >
205 >
206 > configtable = {}
207 > configitem = registrar.configitem(configtable)
208 >
209 > configitem('test', 'some', default='foo')
210 > # overwrite a core config
211 > configitem('ui', 'quiet', default=False)
212 > configitem('ui', 'interactive', default=None)
213 >
206 > @command(b'buggyconfig')
214 > @command(b'buggyconfig')
207 > def cmdbuggyconfig(ui, repo):
215 > def cmdbuggyconfig(ui, repo):
208 > repo.ui.config('ui', 'quiet', False)
216 > repo.ui.config('ui', 'quiet', False)
209 > repo.ui.config('ui', 'interactive', None)
217 > repo.ui.config('ui', 'interactive', None)
218 > repo.ui.config('test', 'some', 'foo')
210 > EOF
219 > EOF
211
220
212 $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
221 $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
222 devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/extensions.py:* (loadall) (glob)
223 devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/extensions.py:* (loadall) (glob)
213 devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
224 devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
214 devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
225 devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
226 devel-warn: specifying a default value for a registered config item: 'test.some' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
215
227
216 $ cd ..
228 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now