annotate 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
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
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22 from . import rcutil
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 EDIT_FLAG = 'edit'
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
26
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
27 # keep typing simple for now
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
28 ConfigLevelT = str
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
29 LEVEL_USER = 'user' # "user" is the default level and never passed explicitly
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
30 LEVEL_LOCAL = 'local'
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
31 LEVEL_GLOBAL = 'global'
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
32 LEVEL_SHARED = 'shared'
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
33 LEVEL_NON_SHARED = 'non_shared'
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
34 EDIT_LEVELS = (
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
35 LEVEL_USER,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
36 LEVEL_LOCAL,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
37 LEVEL_GLOBAL,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
38 LEVEL_SHARED,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
39 LEVEL_NON_SHARED,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
40 )
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
41
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 def find_edit_level(
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
44 ui: uimod.ui, repo, opts: Dict[str, Any]
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
45 ) -> Optional[ConfigLevelT]:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
46 """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
47
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
48 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
49 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
50 """
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
51 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
52 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
53 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
54 if opts.get(level):
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
55 return level
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
56 return EDIT_LEVELS[0]
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
57 return None
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
58
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
59
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
60 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
61 """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
62
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 if level == LEVEL_USER:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 paths = rcutil.userrcpath()
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65 elif level == LEVEL_GLOBAL:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 paths = rcutil.systemrcpath()
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67 elif level == LEVEL_LOCAL:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
68 if not repo:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
69 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
70 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
71 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
72 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
73 elif level == LEVEL_SHARED:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
74 if not repo.shared():
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
75 raise error.InputError(
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
76 _(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
77 )
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
78 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
79 raise error.InputError(
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
80 _(
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
81 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
82 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
83 )
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 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
86 else:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
87 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
88 raise error.ProgrammingError(msg)
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
89
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
90 for f in paths:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 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
92 break
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 if LEVEL_GLOBAL:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
95 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
96 elif LEVEL_LOCAL:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
97 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
98 else:
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
99 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
100
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
101 f = paths[0]
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
102 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
103
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
104 editor = ui.geteditor()
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
105 ui.system(
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
106 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
107 onerr=error.InputError,
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
108 errprefix=_(b"edit failed"),
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
109 blockedtag=b'config_edit',
c97e0fd26225 config: move edition code in its own module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
110 )
52418
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
111
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
112
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
113 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
114 """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
115
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
116 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
117 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
118 """
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
119 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
120 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
121 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
122 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
123 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
124 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
125 # 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
126 pass
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
127 else:
e98cea8fc858 config: move "component display" in the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52417
diff changeset
128 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
129
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
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 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
132 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
133 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
134 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
135 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
136 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
137 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
138 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
139 ) -> 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
140 """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
141
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 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
143
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 :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
146 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
147 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
148 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
149
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 :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
151 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
152
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 :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
154 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
155
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 :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
157 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
158
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 :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
160 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
161 """
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 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
163 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
164 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
165 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
166 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
167 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
168 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
169 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
170 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
171 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
172
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 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
174 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
175 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
176 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
177 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
178 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
179 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
180 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
181 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
182 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
183 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
184 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
185 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
186 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
187 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
188 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
189 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
190 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
191 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
192 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
193 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
194 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
195 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
196 ):
04c3fb885fb6 config: extra the code showing config in its own module too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 52418
diff changeset
197 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
198 # 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
199 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
200 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
201 return matched