X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=Documentation%2Ftechnical%2Fapi-config.txt;h=edf8dfb99b0accf1c3cbe870bdc332783a344dc9;hb=3f263099fca47c278e696fbc0f0d5525318eae0a;hp=f428c5c4864a577f3955c9efc66b52c56a8a713e;hpb=9c3c22e2bf6cf05297556936666c8578e160c366;p=git.git diff --git a/Documentation/technical/api-config.txt b/Documentation/technical/api-config.txt index f428c5c48..edf8dfb99 100644 --- a/Documentation/technical/api-config.txt +++ b/Documentation/technical/api-config.txt @@ -11,9 +11,9 @@ 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 +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). +picking out different variables useful to themselves. A config callback function takes three parameters: @@ -47,11 +47,28 @@ 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). +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 ---------------------- @@ -95,6 +112,28 @@ string is given, prints an error message and returns -1. 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 --------------------