diff --git a/mercurial/ui.py b/mercurial/ui.py index 5caae380ff90735b1a1841a4f26147bf0f01351b_bWVyY3VyaWFsL3VpLnB5..ff2110eadbfa92d4e5d54c8b6068969583aa54ee_bWVyY3VyaWFsL3VpLnB5 100644 --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -471,9 +471,9 @@ 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) @@ -475,8 +475,12 @@ 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,6 +494,4 @@ 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: @@ -495,3 +497,3 @@ else: - value = item.default + value = itemdefault elif (item is not None @@ -497,6 +499,7 @@ elif (item is not None - and item.default is not configitems.dynamicdefault): - msg = ("specifying a default value for a registered " + and item.default is not configitems.dynamicdefault + and default != itemdefault): + msg = ("specifying a mismatched default value for a registered " "config item: '%s.%s' '%s'") msg %= (section, name, default) self.develwarn(msg, 2, 'warn-config-default') diff --git a/tests/test-devel-warnings.t b/tests/test-devel-warnings.t index 5caae380ff90735b1a1841a4f26147bf0f01351b_dGVzdHMvdGVzdC1kZXZlbC13YXJuaW5ncy50..ff2110eadbfa92d4e5d54c8b6068969583aa54ee_dGVzdHMvdGVzdC1kZXZlbC13YXJuaW5ncy50 100644 --- a/tests/test-devel-warnings.t +++ b/tests/test-devel-warnings.t @@ -352,9 +352,10 @@ > > 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): @@ -355,11 +356,12 @@ > # 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') @@ -363,6 +365,8 @@ > 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,7 +374,7 @@ $ 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 mismatched default value for a registered config item: 'ui.quiet' 'True' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) + devel-warn: specifying a mismatched default value for a registered config item: 'ui.interactive' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) + devel-warn: specifying a mismatched 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) @@ -376,4 +380,5 @@ devel-warn: config item requires an explicit default value: 'test.dynamic' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) + devel-warn: specifying a mismatched 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)