Mercurial > public > mercurial-scm > hg
comparison mercurial/configuration/command.py @ 52419:04c3fb885fb6
config: extra the code showing config in its own module too
This conclude our extract of the main semantic in a dedicated module.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 21 Oct 2024 14:30:50 +0200 |
parents | e98cea8fc858 |
children | 3e79ca017157 |
comparison
equal
deleted
inserted
replaced
52418:e98cea8fc858 | 52419:04c3fb885fb6 |
---|---|
2 | 2 |
3 from __future__ import annotations | 3 from __future__ import annotations |
4 | 4 |
5 import os | 5 import os |
6 | 6 |
7 from typing import Any, Dict, Optional | 7 from typing import Any, Collection, Dict, Optional |
8 | 8 |
9 from ..i18n import _ | 9 from ..i18n import _ |
10 | 10 |
11 from .. import ( | 11 from .. import ( |
12 cmdutil, | 12 cmdutil, |
13 error, | 13 error, |
14 formatter, | |
15 pycompat, | |
14 requirements, | 16 requirements, |
15 ui as uimod, | 17 ui as uimod, |
16 util, | 18 util, |
17 vfs as vfsmod, | 19 vfs as vfsmod, |
18 ) | 20 ) |
122 elif t == b'items': | 124 elif t == b'items': |
123 # Don't print anything for 'items'. | 125 # Don't print anything for 'items'. |
124 pass | 126 pass |
125 else: | 127 else: |
126 raise error.ProgrammingError(b'unknown rctype: %s' % t) | 128 raise error.ProgrammingError(b'unknown rctype: %s' % t) |
129 | |
130 | |
131 def show_config( | |
132 ui: uimod.ui, | |
133 repo, | |
134 value_filters: Collection[bytes], | |
135 formatter_options: dict, | |
136 untrusted: bool = False, | |
137 all_known: bool = False, | |
138 show_source: bool = False, | |
139 ) -> bool: | |
140 """Display config value to the user | |
141 | |
142 The display is done using a dedicated `formatter` object. | |
143 | |
144 | |
145 :value_filters: | |
146 if non-empty filter the display value according to these filters. If | |
147 the filter does not match any value, the function return False. True | |
148 otherwise. | |
149 | |
150 :formatter_option: | |
151 options passed to the formatter | |
152 | |
153 :untrusted: | |
154 When set, use untrusted value instead of ignoring them | |
155 | |
156 :all_known: | |
157 Display all known config item, not just the one with an explicit value. | |
158 | |
159 :show_source: | |
160 Show where each value has been defined. | |
161 """ | |
162 fm = ui.formatter(b'config', formatter_options) | |
163 selsections = selentries = [] | |
164 filtered = False | |
165 if value_filters: | |
166 selsections = [v for v in value_filters if b'.' not in v] | |
167 selentries = [v for v in value_filters if b'.' in v] | |
168 filtered = True | |
169 uniquesel = len(selentries) == 1 and not selsections | |
170 selsections = set(selsections) | |
171 selentries = set(selentries) | |
172 | |
173 matched = False | |
174 entries = ui.walkconfig(untrusted=untrusted, all_known=all_known) | |
175 for section, name, value in entries: | |
176 source = ui.configsource(section, name, untrusted) | |
177 value = pycompat.bytestr(value) | |
178 defaultvalue = ui.configdefault(section, name) | |
179 if fm.isplain(): | |
180 source = source or b'none' | |
181 value = value.replace(b'\n', b'\\n') | |
182 entryname = section + b'.' + name | |
183 if filtered and not (section in selsections or entryname in selentries): | |
184 continue | |
185 fm.startitem() | |
186 fm.condwrite(show_source, b'source', b'%s: ', source) | |
187 if uniquesel: | |
188 fm.data(name=entryname) | |
189 fm.write(b'value', b'%s\n', value) | |
190 else: | |
191 fm.write(b'name value', b'%s=%s\n', entryname, value) | |
192 if formatter.isprintable(defaultvalue): | |
193 fm.data(defaultvalue=defaultvalue) | |
194 elif isinstance(defaultvalue, list) and all( | |
195 formatter.isprintable(e) for e in defaultvalue | |
196 ): | |
197 fm.data(defaultvalue=fm.formatlist(defaultvalue, name=b'value')) | |
198 # TODO: no idea how to process unsupported defaultvalue types | |
199 matched = True | |
200 fm.end() | |
201 return matched |