[PATCH 1 of 2] showconfig: use set to filter sections and entry names
Yuya Nishihara
yuya at tcha.org
Wed Feb 21 14:34:06 UTC 2018
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1519221759 -32400
# Wed Feb 21 23:02:39 2018 +0900
# Node ID 11003771245a19f65107b141a9c1adc9461d43ea
# Parent 44e4662d7a61ff8272a96045a60c3b005a099f64
showconfig: use set to filter sections and entry names
Before, an entry matching the specified section could be printed twice if the
selector wasn't unique.
"sections" and "items" are renamed because it's hard to distinguish "sections"
from the loop variable "section".
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1692,11 +1692,16 @@ def config(ui, repo, *values, **opts):
else:
raise error.ProgrammingError('unknown rctype: %s' % t)
untrusted = bool(opts.get('untrusted'))
+
+ selsections = selentries = []
if values:
- sections = [v for v in values if '.' not in v]
- items = [v for v in values if '.' in v]
- if len(items) > 1 or items and sections:
+ selsections = [v for v in values if '.' not in v]
+ selentries = [v for v in values if '.' in v]
+ if len(selentries) > 1 or selentries and selsections:
raise error.Abort(_('only one config item permitted'))
+ selsections = set(selsections)
+ selentries = set(selentries)
+
matched = False
for section, name, value in ui.walkconfig(untrusted=untrusted):
source = ui.configsource(section, name, untrusted)
@@ -1706,18 +1711,17 @@ def config(ui, repo, *values, **opts):
value = value.replace('\n', '\\n')
entryname = section + '.' + name
if values:
- for v in values:
- if v == section:
- fm.startitem()
- fm.condwrite(ui.debugflag, 'source', '%s: ', source)
- fm.write('name value', '%s=%s\n', entryname, value)
- matched = True
- elif v == entryname:
- fm.startitem()
- fm.condwrite(ui.debugflag, 'source', '%s: ', source)
- fm.write('value', '%s\n', value)
- fm.data(name=entryname)
- matched = True
+ if section in selsections:
+ fm.startitem()
+ fm.condwrite(ui.debugflag, 'source', '%s: ', source)
+ fm.write('name value', '%s=%s\n', entryname, value)
+ matched = True
+ elif entryname in selentries:
+ fm.startitem()
+ fm.condwrite(ui.debugflag, 'source', '%s: ', source)
+ fm.write('value', '%s\n', value)
+ fm.data(name=entryname)
+ matched = True
else:
fm.startitem()
fm.condwrite(ui.debugflag, 'source', '%s: ', source)
diff --git a/tests/test-hgrc.t b/tests/test-hgrc.t
--- a/tests/test-hgrc.t
+++ b/tests/test-hgrc.t
@@ -126,6 +126,11 @@ showconfig with multiple arguments
$ hg showconfig alias defaults
alias.log=log -g
defaults.identify=-n
+ $ hg showconfig alias alias
+ alias.log=log -g
+ $ hg showconfig alias.log alias.log
+ abort: only one config item permitted
+ [255]
$ hg showconfig alias defaults.identify
abort: only one config item permitted
[255]
More information about the Mercurial-devel
mailing list