mercurial/helptext/internals/config.txt
author Simon Sapin <simon.sapin@octobus.net>
Fri, 10 Dec 2021 16:57:39 +0100
changeset 48453 9b0e1f64656f
parent 43632 2e017696181f
permissions -rw-r--r--
rhg: refactor relativize_path into a struct + method … instead of a function that takes an iterator and a callback. Differential Revision: https://phab.mercurial-scm.org/D11898
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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