# HG changeset patch # User Pierre-Yves David # Date 1637943734 -3600 # Node ID 7e6488aa12613c3330c47a63442b39c4744b3422 # Parent 0d0ce2529540c92ba2846912368d6c34b316161f extensions: add a default "*" suboptions prefix This is similar to what we do in other section (e.g. `paths`) and allow to change the behavior for all extensions. Sub options on individual extensions overwrite the default settings. Differential Revision: https://phab.mercurial-scm.org/D11823 diff -r 0d0ce2529540 -r 7e6488aa1261 mercurial/extensions.py --- a/mercurial/extensions.py Fri Nov 26 17:17:49 2021 +0100 +++ b/mercurial/extensions.py Fri Nov 26 17:22:14 2021 +0100 @@ -291,6 +291,8 @@ ) ui.log(b'extension', b'- processing %d entries\n', len(result)) with util.timedcm('load all extensions') as stats: + default_sub_options = ui.configsuboptions(b"extensions", b"*")[1] + for (name, path) in result: if path: if path[0:1] == b'!': @@ -315,8 +317,10 @@ error_msg = _(b'failed to import extension "%s": %s') error_msg %= (name, msg) + options = default_sub_options.copy() ext_options = ui.configsuboptions(b"extensions", name)[1] - if stringutil.parsebool(ext_options.get(b"required", b'no')): + options.update(ext_options) + if stringutil.parsebool(options.get(b"required", b'no')): hint = None if isinstance(inst, error.Hint) and inst.hint: hint = inst.hint diff -r 0d0ce2529540 -r 7e6488aa1261 mercurial/helptext/config.txt --- a/mercurial/helptext/config.txt Fri Nov 26 17:17:49 2021 +0100 +++ b/mercurial/helptext/config.txt Fri Nov 26 17:22:14 2021 +0100 @@ -861,6 +861,13 @@ To debug extension loading issue, one can add `--traceback` to their mercurial invocation. +A default setting can we set using the special `*` extension key:: + + [extensions] + *:required = yes + myfeature = ~/.hgext/myfeature.py + rebase= + ``format`` ---------- diff -r 0d0ce2529540 -r 7e6488aa1261 tests/test-check-module-imports.t --- a/tests/test-check-module-imports.t Fri Nov 26 17:17:49 2021 +0100 +++ b/tests/test-check-module-imports.t Fri Nov 26 17:22:14 2021 +0100 @@ -41,4 +41,5 @@ > -X tests/test-demandimport.py \ > -X tests/test-imports-checker.t \ > -X tests/test-verify-repo-operations.py \ + > -X tests/test-extension.t \ > | sed 's-\\-/-g' | "$PYTHON" "$import_checker" - diff -r 0d0ce2529540 -r 7e6488aa1261 tests/test-extension.t --- a/tests/test-extension.t Fri Nov 26 17:17:49 2021 +0100 +++ b/tests/test-extension.t Fri Nov 26 17:22:14 2021 +0100 @@ -2035,3 +2035,20 @@ abort: failed to import extension "missing" from foo/bar/baz/I/do/not/exist/: [Errno 2] $ENOENT$: 'foo/bar/baz/I/do/not/exist' (loading of this extension was required, see `hg help config.extensions` for details) [255] + +Have a "default" setting for the suboption: + + $ cat > $TESTTMP/mandatory-extensions/.hg/hgrc << EOF + > [extensions] + > bad = $TESTTMP/mandatory-extensions/.hg/bad.py + > bad:required = no + > good = $TESTTMP/mandatory-extensions/.hg/good.py + > syntax = $TESTTMP/mandatory-extensions/.hg/syntax.py + > *:required = yes + > EOF + + $ hg -R mandatory-extensions id + *** failed to import extension "bad" from $TESTTMP/mandatory-extensions/.hg/bad.py: babar + abort: failed to import extension "syntax" from $TESTTMP/mandatory-extensions/.hg/syntax.py: invalid syntax (*syntax.py, line 1) (glob) + (loading of this extension was required, see `hg help config.extensions` for details) + [255]