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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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