configitems: issue a devel warning when overriding default config
If the option is registered, there is already a default value available and
passing a new one is at best redundant. So we issue a deprecation warning in
this case.
(note: there will be case were the default value will not be as simple as what
is currently possible. We'll upgrade the configitems code to handle them in
time.)
--- a/mercurial/ui.py Sat Jun 17 12:33:59 2017 +0200
+++ b/mercurial/ui.py Sat Jun 17 13:08:03 2017 +0200
@@ -445,11 +445,17 @@
if default is _unset:
default = None
else:
+ item = self._knownconfig.get(section, {}).get(name)
if default is _unset:
default = None
- item = self._knownconfig.get(section, {}).get(name)
if item is not None:
default = item.default
+ elif item is not None:
+ msg = ("specifying a default value for a registered "
+ "config item: '%s.%s' '%s'")
+ msg %= (section, name, default)
+ self.develwarn(msg, 1, 'warn-config-default')
+
alternates = [name]
for n in alternates:
--- a/tests/test-devel-warnings.t Sat Jun 17 12:33:59 2017 +0200
+++ b/tests/test-devel-warnings.t Sat Jun 17 13:08:03 2017 +0200
@@ -193,4 +193,23 @@
$ HGEMITWARNINGS= hg nouiwarning
+Test warning on config option access and registration
+
+ $ cat << EOF > ${TESTTMP}/buggyconfig.py
+ > """A small extension that tests our developer warnings for config"""
+ >
+ > from mercurial import registrar
+ >
+ > cmdtable = {}
+ > command = registrar.command(cmdtable)
+ >
+ > @command('buggyconfig')
+ > def cmdbuggyconfig(ui, repo):
+ > repo.ui.config('ui', 'quiet', False)
+ > repo.ui.config('ui', 'interactive', None)
+ > EOF
+
+ $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
+ devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
+
$ cd ..