Comments
Patch
@@ -16,7 +16,15 @@ from . import (
def loadconfigtable(ui, extname, configtable):
"""update config item known to the ui with the extension ones"""
for section, items in configtable.items():
- ui._knownconfig.setdefault(section, {}).update(items)
+ knownitems = ui._knownconfig.setdefault(section, {})
+ knownkeys = set(knownitems)
+ newkeys = set(items)
+ for key in sorted(knownkeys & newkeys):
+ msg = "extension '%s' overwrite config item '%s.%s'"
+ msg %= (extname, section, key)
+ ui.develwarn(msg, config='warn-config')
+
+ knownitems.update(items)
class configitem(object):
"""represent a known config item
@@ -203,14 +203,26 @@ Test warning on config option access and
> cmdtable = {}
> command = registrar.command(cmdtable)
>
+ > configtable = {}
+ > configitem = registrar.configitem(configtable)
+ >
+ > configitem('test', 'some', default='foo')
+ > # overwrite a core config
+ > configitem('ui', 'quiet', default=False)
+ > configitem('ui', 'interactive', default=None)
+ >
> @command('buggyconfig')
> def cmdbuggyconfig(ui, repo):
> repo.ui.config('ui', 'quiet', False)
> repo.ui.config('ui', 'interactive', None)
+ > repo.ui.config('test', 'some', 'foo')
> EOF
$ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
+ devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/dispatch.py:* (_dispatch) (glob)
+ devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/dispatch.py:* (_dispatch) (glob)
devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
+ devel-warn: specifying a default value for a registered config item: 'test.some' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
$ cd ..