Skip to content

Commit 9c3c22e

Browse files
peffgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 828ea97 commit 9c3c22e

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
config API
2+
==========
3+
4+
The config API gives callers a way to access git configuration files
5+
(and files which have the same syntax). See linkgit:git-config[1] for a
6+
discussion of the config file syntax.
7+
8+
General Usage
9+
-------------
10+
11+
Config files are parsed linearly, and each variable found is passed to a
12+
caller-provided callback function. The callback function is responsible
13+
for any actions to be taken on the config option, and is free to ignore
14+
some options (it is not uncommon for the configuration to be parsed
15+
several times during the run of a git program, with different callbacks
16+
picking out different variables useful to themselves).
17+
18+
A config callback function takes three parameters:
19+
20+
- the name of the parsed variable. This is in canonical "flat" form: the
21+
section, subsection, and variable segments will be separated by dots,
22+
and the section and variable segments will be all lowercase. E.g.,
23+
`core.ignorecase`, `diff.SomeType.textconv`.
24+
25+
- the value of the found variable, as a string. If the variable had no
26+
value specified, the value will be NULL (typically this means it
27+
should be interpreted as boolean true).
28+
29+
- a void pointer passed in by the caller of the config API; this can
30+
contain callback-specific data
31+
32+
A config callback should return 0 for success, or -1 if the variable
33+
could not be parsed properly.
34+
35+
Basic Config Querying
36+
---------------------
37+
38+
Most programs will simply want to look up variables in all config files
39+
that git knows about, using the normal precedence rules. To do this,
40+
call `git_config` with a callback function and void data pointer.
41+
42+
`git_config` will read all config sources in order of increasing
43+
priority. Thus a callback should typically overwrite previously-seen
44+
entries with new ones (e.g., if both the user-wide `~/.gitconfig` and
45+
repo-specific `.git/config` contain `color.ui`, the config machinery
46+
will first feed the user-wide one to the callback, and then the
47+
repo-specific one; by overwriting, the higher-priority repo-specific
48+
value is left at the end).
49+
50+
There is a special version of `git_config` called `git_config_early`
51+
that takes an additional parameter to specify the repository config.
52+
This should be used early in a git program when the repository location
53+
has not yet been determined (and calling the usual lazy-evaluation
54+
lookup rules would yield an incorrect location).
55+
56+
Reading Specific Files
57+
----------------------
58+
59+
To read a specific file in git-config format, use
60+
`git_config_from_file`. This takes the same callback and data parameters
61+
as `git_config`.
62+
63+
Value Parsing Helpers
64+
---------------------
65+
66+
To aid in parsing string values, the config API provides callbacks with
67+
a number of helper functions, including:
68+
69+
`git_config_int`::
70+
Parse the string to an integer, including unit factors. Dies on error;
71+
otherwise, returns the parsed result.
72+
73+
`git_config_ulong`::
74+
Identical to `git_config_int`, but for unsigned longs.
75+
76+
`git_config_bool`::
77+
Parse a string into a boolean value, respecting keywords like "true" and
78+
"false". Integer values are converted into true/false values (when they
79+
are non-zero or zero, respectively). Other values cause a die(). If
80+
parsing is successful, the return value is the result.
81+
82+
`git_config_bool_or_int`::
83+
Same as `git_config_bool`, except that integers are returned as-is, and
84+
an `is_bool` flag is unset.
85+
86+
`git_config_maybe_bool`::
87+
Same as `git_config_bool`, except that it returns -1 on error rather
88+
than dying.
89+
90+
`git_config_string`::
91+
Allocates and copies the value string into the `dest` parameter; if no
92+
string is given, prints an error message and returns -1.
93+
94+
`git_config_pathname`::
95+
Similar to `git_config_string`, but expands `~` or `~user` into the
96+
user's home directory when found at the beginning of the path.
97+
98+
Writing Config Files
99+
--------------------
100+
101+
TODO

0 commit comments

Comments
 (0)