changeset 32989:149b68224b08

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.)
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 17 Jun 2017 13:08:03 +0200
parents 2529e2ae9f4c
children 1d5d7e2b7ab5
files mercurial/ui.py tests/test-devel-warnings.t
diffstat 2 files changed, 26 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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 ..