docs: add a basic description of the config API
This wasn't documented at all; this is pretty bare-bones, but it should at least give new git hackers a basic idea of how the reading side works. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
828ea97de4
commit
9c3c22e2bf
101
Documentation/technical/api-config.txt
Normal file
101
Documentation/technical/api-config.txt
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
config API
|
||||||
|
==========
|
||||||
|
|
||||||
|
The config API gives callers a way to access git configuration files
|
||||||
|
(and files which have the same syntax). See linkgit:git-config[1] for a
|
||||||
|
discussion of the config file syntax.
|
||||||
|
|
||||||
|
General Usage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Config files are parsed linearly, and each variable found is passed to a
|
||||||
|
caller-provided callback function. The callback function is responsible
|
||||||
|
for any actions to be taken on the config option, and is free to ignore
|
||||||
|
some options (it is not uncommon for the configuration to be parsed
|
||||||
|
several times during the run of a git program, with different callbacks
|
||||||
|
picking out different variables useful to themselves).
|
||||||
|
|
||||||
|
A config callback function takes three parameters:
|
||||||
|
|
||||||
|
- the name of the parsed variable. This is in canonical "flat" form: the
|
||||||
|
section, subsection, and variable segments will be separated by dots,
|
||||||
|
and the section and variable segments will be all lowercase. E.g.,
|
||||||
|
`core.ignorecase`, `diff.SomeType.textconv`.
|
||||||
|
|
||||||
|
- the value of the found variable, as a string. If the variable had no
|
||||||
|
value specified, the value will be NULL (typically this means it
|
||||||
|
should be interpreted as boolean true).
|
||||||
|
|
||||||
|
- a void pointer passed in by the caller of the config API; this can
|
||||||
|
contain callback-specific data
|
||||||
|
|
||||||
|
A config callback should return 0 for success, or -1 if the variable
|
||||||
|
could not be parsed properly.
|
||||||
|
|
||||||
|
Basic Config Querying
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Most programs will simply want to look up variables in all config files
|
||||||
|
that git knows about, using the normal precedence rules. To do this,
|
||||||
|
call `git_config` with a callback function and void data pointer.
|
||||||
|
|
||||||
|
`git_config` will read all config sources in order of increasing
|
||||||
|
priority. Thus a callback should typically overwrite previously-seen
|
||||||
|
entries with new ones (e.g., if both the user-wide `~/.gitconfig` and
|
||||||
|
repo-specific `.git/config` contain `color.ui`, the config machinery
|
||||||
|
will first feed the user-wide one to the callback, and then the
|
||||||
|
repo-specific one; by overwriting, the higher-priority repo-specific
|
||||||
|
value is left at the end).
|
||||||
|
|
||||||
|
There is a special version of `git_config` called `git_config_early`
|
||||||
|
that takes an additional parameter to specify the repository config.
|
||||||
|
This should be used early in a git program when the repository location
|
||||||
|
has not yet been determined (and calling the usual lazy-evaluation
|
||||||
|
lookup rules would yield an incorrect location).
|
||||||
|
|
||||||
|
Reading Specific Files
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
To read a specific file in git-config format, use
|
||||||
|
`git_config_from_file`. This takes the same callback and data parameters
|
||||||
|
as `git_config`.
|
||||||
|
|
||||||
|
Value Parsing Helpers
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
To aid in parsing string values, the config API provides callbacks with
|
||||||
|
a number of helper functions, including:
|
||||||
|
|
||||||
|
`git_config_int`::
|
||||||
|
Parse the string to an integer, including unit factors. Dies on error;
|
||||||
|
otherwise, returns the parsed result.
|
||||||
|
|
||||||
|
`git_config_ulong`::
|
||||||
|
Identical to `git_config_int`, but for unsigned longs.
|
||||||
|
|
||||||
|
`git_config_bool`::
|
||||||
|
Parse a string into a boolean value, respecting keywords like "true" and
|
||||||
|
"false". Integer values are converted into true/false values (when they
|
||||||
|
are non-zero or zero, respectively). Other values cause a die(). If
|
||||||
|
parsing is successful, the return value is the result.
|
||||||
|
|
||||||
|
`git_config_bool_or_int`::
|
||||||
|
Same as `git_config_bool`, except that integers are returned as-is, and
|
||||||
|
an `is_bool` flag is unset.
|
||||||
|
|
||||||
|
`git_config_maybe_bool`::
|
||||||
|
Same as `git_config_bool`, except that it returns -1 on error rather
|
||||||
|
than dying.
|
||||||
|
|
||||||
|
`git_config_string`::
|
||||||
|
Allocates and copies the value string into the `dest` parameter; if no
|
||||||
|
string is given, prints an error message and returns -1.
|
||||||
|
|
||||||
|
`git_config_pathname`::
|
||||||
|
Similar to `git_config_string`, but expands `~` or `~user` into the
|
||||||
|
user's home directory when found at the beginning of the path.
|
||||||
|
|
||||||
|
Writing Config Files
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
TODO
|
Loading…
Reference in New Issue
Block a user