Mercurial > hg-stable
changeset 29954:80fef5251099
config: add template support
V2:
- Limit escaping to plain formatting only
- Use the formatter consistently (no more ui.debug)
- Always include 'name' and 'value'
V3:
- Always convert 'value' to string (this also makes sure we handle functions)
- Keep real debug message as ui.debug for now
- Add additional tests.
Note: I'm not quite sure about the best approach to handling
the 'print the full config' case.
For me, it printed the 'ui.promptecho' key at the end.
I went with globs there as that at least tests the json display reliably.
Example output:
[
{
"name": "ui.username",
"source": "/home/mathias/.hgrc:2",
"value": "Mathias De Maré <mathias.demare@gmail.com>"
}
]
author | Mathias De Maré <mathias.demare@gmail.com> |
---|---|
date | Mon, 29 Aug 2016 07:07:15 +0200 |
parents | e7cacb45c4be |
children | e7acbe538baf |
files | mercurial/commands.py tests/test-completion.t tests/test-config.t |
diffstat | 3 files changed, 52 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Mon Aug 29 17:19:09 2016 +0200 +++ b/mercurial/commands.py Mon Aug 29 07:07:15 2016 +0200 @@ -1788,7 +1788,7 @@ [('u', 'untrusted', None, _('show untrusted configuration options')), ('e', 'edit', None, _('edit user config')), ('l', 'local', None, _('edit repository config')), - ('g', 'global', None, _('edit global config'))], + ('g', 'global', None, _('edit global config'))] + formatteropts, _('[-u] [NAME]...'), optionalrepo=True) def config(ui, repo, *values, **opts): @@ -1849,6 +1849,7 @@ onerr=error.Abort, errprefix=_("edit failed")) return + fm = ui.formatter('config', opts) for f in scmutil.rcpath(): ui.debug('read config from: %s\n' % f) untrusted = bool(opts.get('untrusted')) @@ -1859,25 +1860,32 @@ raise error.Abort(_('only one config item permitted')) matched = False for section, name, value in ui.walkconfig(untrusted=untrusted): - value = str(value).replace('\n', '\\n') - sectname = section + '.' + name + value = str(value) + if fm.isplain(): + value = value.replace('\n', '\\n') + entryname = section + '.' + name if values: for v in values: if v == section: - ui.debug('%s: ' % - ui.configsource(section, name, untrusted)) - ui.write('%s=%s\n' % (sectname, value)) + fm.startitem() + fm.condwrite(ui.debugflag, 'source', '%s: ', + ui.configsource(section, name, untrusted)) + fm.write('name value', '%s=%s\n', entryname, value) matched = True - elif v == sectname: - ui.debug('%s: ' % - ui.configsource(section, name, untrusted)) - ui.write(value, '\n') + elif v == entryname: + fm.startitem() + fm.condwrite(ui.debugflag, 'source', '%s: ', + ui.configsource(section, name, untrusted)) + fm.write('value', '%s\n', value) + fm.data(name=entryname) matched = True else: - ui.debug('%s: ' % - ui.configsource(section, name, untrusted)) - ui.write('%s=%s\n' % (sectname, value)) + fm.startitem() + fm.condwrite(ui.debugflag, 'source', '%s: ', + ui.configsource(section, name, untrusted)) + fm.write('name value', '%s=%s\n', entryname, value) matched = True + fm.end() if matched: return 0 return 1
--- a/tests/test-completion.t Mon Aug 29 17:19:09 2016 +0200 +++ b/tests/test-completion.t Mon Aug 29 07:07:15 2016 +0200 @@ -232,7 +232,7 @@ branches: active, closed, template bundle: force, rev, branch, base, all, type, ssh, remotecmd, insecure cat: output, rev, decode, include, exclude - config: untrusted, edit, local, global + config: untrusted, edit, local, global, template copy: after, force, include, exclude, dry-run debugancestor: debugapplystreamclonebundle:
--- a/tests/test-config.t Mon Aug 29 17:19:09 2016 +0200 +++ b/tests/test-config.t Mon Aug 29 07:07:15 2016 +0200 @@ -54,6 +54,36 @@ Section.KeY=Case Sensitive Section.key=lower case + $ hg showconfig Section -Tjson + [ + { + "name": "Section.KeY", + "source": "*.hgrc:16", (glob) + "value": "Case Sensitive" + }, + { + "name": "Section.key", + "source": "*.hgrc:17", (glob) + "value": "lower case" + } + ] + $ hg showconfig Section.KeY -Tjson + [ + { + "name": "Section.KeY", + "source": "*.hgrc:16", (glob) + "value": "Case Sensitive" + } + ] + $ hg showconfig -Tjson | tail -7 + }, + { + "name": "*", (glob) + "source": "*", (glob) + "value": "*" (glob) + } + ] + Test "%unset" $ cat >> $HGRCPATH <<EOF