annotate mercurial/helptext/internals/config.txt @ 52032:09a54892b7ee

mergestate: reduce the number of attribute lookups This code is called a lot during updates, this is a very small but also very easy thing to do.
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 21 Aug 2024 09:48:14 +0200
parents 2e017696181f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
1 All config options used within Mercurial should be registered.
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
2
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
3 Config Option in Core
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
4 =====================
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
5
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
6 Config options used by Mercurial core are registered in the
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
7 ``mercurial.configitems`` module.
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
8
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
9 Simple entry
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
10 ------------
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
11
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
12 A registration entry typically looks like::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
13
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
14 coreconfigitem('section', 'option',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
15 default=MyDefaultValue,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
16 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
17
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
18 Once registered, Mercurial will know that ``section.option`` is a legitimate
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
19 config option and that ``MyDefaultValue`` should be used if no other values are
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
20 defined in configuration files.
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
21
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
22 Complex default value
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
23 ---------------------
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
24
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
25 If the default provided is a callable, it is called to retrieve the default
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
26 value when accessing the config option. This is useful for default values that
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
27 are mutable like the empty list::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
28
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
29 coreconfigitem('pager', 'ignore',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
30 default=list,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
31 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
32
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
33 In addition, there are cases where the default is not fixed, but computed from
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
34 other properties. In this case, use the ``dynamicdefault`` object as the value
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
35 for the ``default`` parameter. A default value is then explicitly required when
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
36 reading the option::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
37
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
38 # registration
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
39 coreconfigitem('web', 'name',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
40 default=dynamicdefault,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
41 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
42
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
43 # usage
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
44 ui.config('web', 'name', dirname)
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
45
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
46 Free form options
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
47 -----------------
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
48
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
49 Some config sections use free form options (e.g. ``paths``). You can register
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
50 them using the ``generic`` parameters::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
51
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
52 coreconfigitem('paths', '.*',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
53 default=None,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
54 generic=True,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
55 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
56
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
57 When ``generic=True`` is set, the option name is matched as a regular expression
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
58 (rooted to string start). It can be used to select specific sub parameters::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
59
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
60 coreconfigitem('merge-tools', br'.*\.args$',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
61 default="$local $base $other",
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
62 generic=True,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
63 priority=-1,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
64 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
65
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
66 The ``priority`` parameter controls the order used to match the generic pattern
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
67 (lower first).
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
68
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
69 Config Option in Extensions
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
70 ===========================
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
71
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
72 General case
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
73 ------------
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
74
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
75 Extensions should register config items through the ``registrar`` API (also used
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
76 for commands and others)::
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
77
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
78 configtable = {}
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
79 configitem = registrar.configitem(configtable)
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
80
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
81 configitem('blackbox', 'dirty',
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
82 default=False,
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
83 )
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
84
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
85 The ``dynamicdefault`` object is then available as
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
86 ``configitem.dynamicdefault``.
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
87
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
88 Supporting older versions
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
89 -------------------------
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
90
34951
fb7f58daca48 internals: copy-edit "register" -> "registrar" in configitem docs
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents: 34948
diff changeset
91 The registrar was introduced in Mercurial 4.3, and the ``generic`` parameter was
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
92 introduced in 4.4. Starting with Mercurial 4.4, all core options were registered
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
93 and developer warnings are emitted when accessing unregistered option.
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
94
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
95 Extensions supporting versions older than Mercurial 4.3 cannot rely on the
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
96 default value being registered. The simplest way to register an option while
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
97 still supporting an older version is to use ``dynamicdefault`` for options
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
98 requiring a default value. The existing code passing an explicit default can
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
99 then stay in use until compatibility with Mercurial 4.2 is dropped.
34932
fd78276948b4 internal-doc: document the config register mechanism
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
100
34948
ff178743e59b help: minor copy editing for grammar
Matt Harbison <matt_harbison@yahoo.com>
parents: 34932
diff changeset
101 As reminder, here are the default values for each config type:
40544
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
102
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
103 - config: None
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
104 - configbool: False
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
105 - configbytes: 0
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
106 - configdate: None
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
107 - configint: None
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
108 - configlist: []
5b530d767e67 help: unjumble the list of default config values for `internals.config`
Matt Harbison <matt_harbison@yahoo.com>
parents: 34951
diff changeset
109 - configpath: None