[PATCH STABLE] configitems: relax warning about unwanted default value

Augie Fackler raf at durin42.com
Tue Oct 31 10:44:42 EDT 2017


> On Oct 31, 2017, at 10:32, Yuya Nishihara <yuya at tcha.org> wrote:
> 
> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1509457050 -32400
> #      Tue Oct 31 22:37:30 2017 +0900
> # Branch stable
> # Node ID 4f00958f5fc9d7ae90468f6159dff7720d0f2b27
> # Parent  5caae380ff90735b1a1841a4f26147bf0f01351b
> configitems: relax warning about unwanted default value
> 
> The original condition was a bit harsh for extension authors since third-party
> extensions need to preserve compatibility with older Mercurial versions, where
> no defaults would be loaded from the configtable. So let's silence the warning
> if the given default value matches, which should be harmless.
> 
> diff --git a/mercurial/ui.py b/mercurial/ui.py
> --- a/mercurial/ui.py
> +++ b/mercurial/ui.py
> @@ -471,12 +471,16 @@ class ui(object):
>         return value
> 
>     def _config(self, section, name, default=_unset, untrusted=False):
> -        value = default
> +        value = itemdefault = default
>         item = self._knownconfig.get(section, {}).get(name)
>         alternates = [(section, name)]
> 
>         if item is not None:
>             alternates.extend(item.alias)
> +            if callable(item.default):
> +                itemdefault = item.default()
> +            else:
> +                itemdefault = item.default
>         else:
>             msg = ("accessing unregistered config item: '%s.%s'")
>             msg %= (section, name)
> @@ -490,12 +494,11 @@ class ui(object):
>                 msg = "config item requires an explicit default value: '%s.%s'"
>                 msg %= (section, name)
>                 self.develwarn(msg, 2, 'warn-config-default')
> -            elif callable(item.default):
> -                    value = item.default()
>             else:
> -                value = item.default
> +                value = itemdefault
>         elif (item is not None
> -              and item.default is not configitems.dynamicdefault):
> +              and item.default is not configitems.dynamicdefault
> +              and default != itemdefault):
>             msg = ("specifying a default value for a registered "
>                    "config item: '%s.%s' '%s'")

nit: should I edit the message to say "mismatched default" since that's what we're really complaining about?

>             msg %= (section, name, default)
> diff --git a/tests/test-devel-warnings.t b/tests/test-devel-warnings.t
> --- a/tests/test-devel-warnings.t
> +++ b/tests/test-devel-warnings.t
> @@ -352,17 +352,21 @@ Test warning on config option access and
>> 
>> configitem('test', 'some', default='foo')
>> configitem('test', 'dynamic', default=configitems.dynamicdefault)
> +  > configitem('test', 'callable', default=list)
>> # overwrite a core config
>> configitem('ui', 'quiet', default=False)
>> configitem('ui', 'interactive', default=None)
>> 
>> @command(b'buggyconfig')
>> def cmdbuggyconfig(ui, repo):
> -  >     repo.ui.config('ui', 'quiet', False)
> -  >     repo.ui.config('ui', 'interactive', None)
> +  >     repo.ui.config('ui', 'quiet', True)
> +  >     repo.ui.config('ui', 'interactive', False)
> +  >     repo.ui.config('test', 'some', 'bar')
>>    repo.ui.config('test', 'some', 'foo')
>>    repo.ui.config('test', 'dynamic', 'some-required-default')
>>    repo.ui.config('test', 'dynamic')
> +  >     repo.ui.config('test', 'callable', [])
> +  >     repo.ui.config('test', 'callable', 'foo')
>>    repo.ui.config('test', 'unregistered')
>>    repo.ui.config('unregistered', 'unregistered')
>> EOF
> @@ -370,10 +374,11 @@ Test warning on config option access and
>   $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
>   devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/extensions.py:* (_loadextra) (glob)
>   devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/extensions.py:* (_loadextra) (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)
> +  devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'True' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
> +  devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
> +  devel-warn: specifying a default value for a registered config item: 'test.some' 'bar' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
>   devel-warn: config item requires an explicit default value: 'test.dynamic' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
> +  devel-warn: specifying a default value for a registered config item: 'test.callable' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
>   devel-warn: accessing unregistered config item: 'test.unregistered' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
>   devel-warn: accessing unregistered config item: 'unregistered.unregistered' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
> 
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list