141 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
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).
 | 
						|
 | 
						|
The `git_config_with_options` function lets the caller examine config
 | 
						|
while adjusting some of the default behavior of `git_config`. It should
 | 
						|
almost never be used by "regular" git code that is looking up
 | 
						|
configuration variables. It is intended for advanced callers like
 | 
						|
`git-config`, which are intentionally tweaking the normal config-lookup
 | 
						|
process. It takes two extra parameters:
 | 
						|
 | 
						|
`filename`::
 | 
						|
If this parameter is non-NULL, it specifies the name of a file to
 | 
						|
parse for configuration, rather than looking in the usual files. Regular
 | 
						|
`git_config` defaults to `NULL`.
 | 
						|
 | 
						|
`respect_includes`::
 | 
						|
Specify whether include directives should be followed in parsed files.
 | 
						|
Regular `git_config` defaults to `1`.
 | 
						|
 | 
						|
There is a special version of `git_config` called `git_config_early`.
 | 
						|
This version takes an additional parameter to specify the repository
 | 
						|
config, instead of having it looked up via `git_path`. This is useful
 | 
						|
early in a git program before the repository has been found. Unless
 | 
						|
you're working with early setup code, you probably don't want to use
 | 
						|
this.
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
Include Directives
 | 
						|
------------------
 | 
						|
 | 
						|
By default, the config parser does not respect include directives.
 | 
						|
However, a caller can use the special `git_config_include` wrapper
 | 
						|
callback to support them. To do so, you simply wrap your "real" callback
 | 
						|
function and data pointer in a `struct config_include_data`, and pass
 | 
						|
the wrapper to the regular config-reading functions. For example:
 | 
						|
 | 
						|
-------------------------------------------
 | 
						|
int read_file_with_include(const char *file, config_fn_t fn, void *data)
 | 
						|
{
 | 
						|
	struct config_include_data inc = CONFIG_INCLUDE_INIT;
 | 
						|
	inc.fn = fn;
 | 
						|
	inc.data = data;
 | 
						|
	return git_config_from_file(git_config_include, file, &inc);
 | 
						|
}
 | 
						|
-------------------------------------------
 | 
						|
 | 
						|
`git_config` respects includes automatically. The lower-level
 | 
						|
`git_config_from_file` does not.
 | 
						|
 | 
						|
Writing Config Files
 | 
						|
--------------------
 | 
						|
 | 
						|
TODO
 |