Mercurial > public > mercurial-scm > hg
annotate mercurial/configuration/command.py @ 52425:3e79ca017157
config: gather constant and type into the `__init__.py`
This will help using them in multiple files.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 23 Oct 2024 00:43:17 +0200 |
parents | 04c3fb885fb6 |
children | 22129ce9f86d |
rev | line source |
---|---|
52417
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 # Gather code related to command dealing with configuration. |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 from __future__ import annotations |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 import os |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
52419
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
7 from typing import Any, Collection, Dict, Optional |
52417
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 from ..i18n import _ |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 from .. import ( |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 cmdutil, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 error, |
52419
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
14 formatter, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
15 pycompat, |
52417
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 requirements, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 ui as uimod, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 util, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 vfs as vfsmod, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 ) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 |
52425
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
22 from . import ( |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
23 ConfigLevelT, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
24 EDIT_LEVELS, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
25 LEVEL_GLOBAL, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
26 LEVEL_LOCAL, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
27 LEVEL_NON_SHARED, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
28 LEVEL_SHARED, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
29 LEVEL_USER, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
30 rcutil, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
31 ) |
52417
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
32 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
33 EDIT_FLAG = 'edit' |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
36 def find_edit_level( |
52425
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
37 ui: uimod.ui, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
38 repo, |
3e79ca017157
config: gather constant and type into the `__init__.py`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52419
diff
changeset
|
39 opts: Dict[str, Any], |
52417
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
40 ) -> Optional[ConfigLevelT]: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
41 """return the level we should edit, if any. |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
42 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
43 Parse the command option to detect when an edit is requested, and if so the |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
44 configuration level we should edit. |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
45 """ |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
46 if opts.get(EDIT_FLAG) or any(opts.get(o) for o in EDIT_LEVELS): |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
47 cmdutil.check_at_most_one_arg(opts, *EDIT_LEVELS) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
48 for level in EDIT_LEVELS: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
49 if opts.get(level): |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
50 return level |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
51 return EDIT_LEVELS[0] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
52 return None |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
53 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
54 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
55 def edit_config(ui: uimod.ui, repo, level: ConfigLevelT) -> None: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
56 """let the user edit configuration file for the given level""" |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
57 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
58 if level == LEVEL_USER: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
59 paths = rcutil.userrcpath() |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
60 elif level == LEVEL_GLOBAL: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
61 paths = rcutil.systemrcpath() |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
62 elif level == LEVEL_LOCAL: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
63 if not repo: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
64 raise error.InputError(_(b"can't use --local outside a repository")) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
65 paths = [repo.vfs.join(b'hgrc')] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
66 elif level == LEVEL_NON_SHARED: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
67 paths = [repo.vfs.join(b'hgrc-not-shared')] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
68 elif level == LEVEL_SHARED: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
69 if not repo.shared(): |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
70 raise error.InputError( |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
71 _(b"repository is not shared; can't use --shared") |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 ) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 if requirements.SHARESAFE_REQUIREMENT not in repo.requirements: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
74 raise error.InputError( |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 _( |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 b"share safe feature not enabled; " |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
77 b"unable to edit shared source repository config" |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 ) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
79 ) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
80 paths = [vfsmod.vfs(repo.sharedpath).join(b'hgrc')] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 else: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 msg = 'unknown config level: %s' % level |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 raise error.ProgrammingError(msg) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
84 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 for f in paths: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
86 if os.path.exists(f): |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 break |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
88 else: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 if LEVEL_GLOBAL: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 samplehgrc = uimod.samplehgrcs[b'global'] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
91 elif LEVEL_LOCAL: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 samplehgrc = uimod.samplehgrcs[b'local'] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
93 else: |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
94 samplehgrc = uimod.samplehgrcs[b'user'] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
95 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
96 f = paths[0] |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
97 util.writefile(f, util.tonativeeol(samplehgrc)) |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
98 |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
99 editor = ui.geteditor() |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
100 ui.system( |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 b"%s \"%s\"" % (editor, f), |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
102 onerr=error.InputError, |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
103 errprefix=_(b"edit failed"), |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
104 blockedtag=b'config_edit', |
c97e0fd26225
config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
105 ) |
52418
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
106 |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
107 |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
108 def show_component(ui: uimod.ui, repo) -> None: |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
109 """show the component used to build the config |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
110 |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
111 XXX this skip over various source and ignore the repository config, so it |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
112 XXX is probably useless old code. |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
113 """ |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
114 for t, f in rcutil.rccomponents(): |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
115 if t == b'path': |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
116 ui.debug(b'read config from: %s\n' % f) |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
117 elif t == b'resource': |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
118 ui.debug(b'read config from: resource:%s.%s\n' % (f[0], f[1])) |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
119 elif t == b'items': |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
120 # Don't print anything for 'items'. |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
121 pass |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
122 else: |
e98cea8fc858
config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52417
diff
changeset
|
123 raise error.ProgrammingError(b'unknown rctype: %s' % t) |
52419
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
124 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
125 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
126 def show_config( |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
127 ui: uimod.ui, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
128 repo, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
129 value_filters: Collection[bytes], |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
130 formatter_options: dict, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
131 untrusted: bool = False, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
132 all_known: bool = False, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
133 show_source: bool = False, |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
134 ) -> bool: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
135 """Display config value to the user |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
136 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
137 The display is done using a dedicated `formatter` object. |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
138 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
139 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
140 :value_filters: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
141 if non-empty filter the display value according to these filters. If |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
142 the filter does not match any value, the function return False. True |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
143 otherwise. |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
144 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
145 :formatter_option: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
146 options passed to the formatter |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
147 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
148 :untrusted: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
149 When set, use untrusted value instead of ignoring them |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
150 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
151 :all_known: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
152 Display all known config item, not just the one with an explicit value. |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
153 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
154 :show_source: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
155 Show where each value has been defined. |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
156 """ |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
157 fm = ui.formatter(b'config', formatter_options) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
158 selsections = selentries = [] |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
159 filtered = False |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
160 if value_filters: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
161 selsections = [v for v in value_filters if b'.' not in v] |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
162 selentries = [v for v in value_filters if b'.' in v] |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
163 filtered = True |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
164 uniquesel = len(selentries) == 1 and not selsections |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
165 selsections = set(selsections) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
166 selentries = set(selentries) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
167 |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
168 matched = False |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
169 entries = ui.walkconfig(untrusted=untrusted, all_known=all_known) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
170 for section, name, value in entries: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
171 source = ui.configsource(section, name, untrusted) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
172 value = pycompat.bytestr(value) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
173 defaultvalue = ui.configdefault(section, name) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
174 if fm.isplain(): |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
175 source = source or b'none' |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
176 value = value.replace(b'\n', b'\\n') |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
177 entryname = section + b'.' + name |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
178 if filtered and not (section in selsections or entryname in selentries): |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
179 continue |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
180 fm.startitem() |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
181 fm.condwrite(show_source, b'source', b'%s: ', source) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
182 if uniquesel: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
183 fm.data(name=entryname) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
184 fm.write(b'value', b'%s\n', value) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
185 else: |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
186 fm.write(b'name value', b'%s=%s\n', entryname, value) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
187 if formatter.isprintable(defaultvalue): |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
188 fm.data(defaultvalue=defaultvalue) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
189 elif isinstance(defaultvalue, list) and all( |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
190 formatter.isprintable(e) for e in defaultvalue |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
191 ): |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
192 fm.data(defaultvalue=fm.formatlist(defaultvalue, name=b'value')) |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
193 # TODO: no idea how to process unsupported defaultvalue types |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
194 matched = True |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
195 fm.end() |
04c3fb885fb6
config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
52418
diff
changeset
|
196 return matched |