config.txt
108 lines
| 3.1 KiB
| text/plain
|
TextLexer
Boris Feld
|
r34933 | All config options used within Mercurial should be registered. | ||
Config Option in Core | ||||
===================== | ||||
Config options used by Mercurial core are registered in the | ||||
``mercurial.configitems`` module. | ||||
Simple entry | ||||
------------ | ||||
A registration entry typically looks like:: | ||||
coreconfigitem('section', 'option', | ||||
default=MyDefaultValue, | ||||
) | ||||
Once registered, Mercurial will know that ``section.option`` is a legitimate | ||||
config option and that ``MyDefaultValue`` should be used if no other values are | ||||
defined in configuration files. | ||||
Complex default value | ||||
--------------------- | ||||
If the default provided is a callable, it is called to retrieve the default | ||||
Matt Harbison
|
r34950 | value when accessing the config option. This is useful for default values that | ||
Boris Feld
|
r34933 | are mutable like the empty list:: | ||
coreconfigitem('pager', 'ignore', | ||||
default=list, | ||||
) | ||||
In addition, there are cases where the default is not fixed, but computed from | ||||
Matt Harbison
|
r34950 | other properties. In this case, use the ``dynamicdefault`` object as the value | ||
for the ``default`` parameter. A default value is then explicitly required when | ||||
Boris Feld
|
r34933 | reading the option:: | ||
# registration | ||||
coreconfigitem('web', 'name', | ||||
default=dynamicdefault, | ||||
) | ||||
# usage | ||||
Matt Harbison
|
r34950 | ui.config('web', 'name', dirname) | ||
Boris Feld
|
r34933 | |||
Free form options | ||||
----------------- | ||||
Some config sections use free form options (e.g. ``paths``). You can register | ||||
them using the ``generic`` parameters:: | ||||
coreconfigitem('paths', '.*', | ||||
default=None, | ||||
generic=True, | ||||
) | ||||
When ``generic=True`` is set, the option name is matched as a regular expression | ||||
(rooted to string start). It can be used to select specific sub parameters:: | ||||
coreconfigitem('merge-tools', br'.*\.args$', | ||||
default="$local $base $other", | ||||
generic=True, | ||||
priority=-1, | ||||
) | ||||
Matt Harbison
|
r34950 | The ``priority`` parameter controls the order used to match the generic pattern | ||
Boris Feld
|
r34933 | (lower first). | ||
Config Option in Extensions | ||||
=========================== | ||||
General case | ||||
------------ | ||||
Extensions should register config items through the ``registrar`` API (also used | ||||
for commands and others):: | ||||
configtable = {} | ||||
configitem = registrar.configitem(configtable) | ||||
configitem('blackbox', 'dirty', | ||||
default=False, | ||||
) | ||||
The ``dynamicdefault`` object is then available as | ||||
``configitem.dynamicdefault``. | ||||
Matt Harbison
|
r34950 | Supporting older versions | ||
------------------------- | ||||
Boris Feld
|
r34933 | |||
Kevin Bullock
|
r34952 | The registrar was introduced in Mercurial 4.3, and the ``generic`` parameter was | ||
Boris Feld
|
r34933 | introduced in 4.4. Starting with Mercurial 4.4, all core options were registered | ||
and developer warnings are emitted when accessing unregistered option. | ||||
Matt Harbison
|
r34950 | Extensions supporting versions older than Mercurial 4.3 cannot rely on the | ||
default value being registered. The simplest way to register an option while | ||||
still supporting an older version is to use ``dynamicdefault`` for options | ||||
requiring a default value. The existing code passing an explicit default can | ||||
then stay in use until compatibility with Mercurial 4.2 is dropped. | ||||
Boris Feld
|
r34933 | |||
Matt Harbison
|
r34950 | As reminder, here are the default values for each config type: | ||
Boris Feld
|
r34933 | - config: None | ||
- configbool: False | ||||
- configbytes: 0 | ||||
- configdate: None | ||||
- configint: None | ||||
- configlist: [] | ||||
Matt Harbison
|
r34950 | - configpath: None | ||