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