diff options
author | Russell Belfer <rb@github.com> | 2013-03-15 16:39:00 -0700 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2013-03-15 16:39:00 -0700 |
commit | 5540d9477ed143707435324e785336d254b12e47 (patch) | |
tree | 4ffaba1990a82cc51ee5169d7d2913ecceef4df2 /include/git2/common.h | |
parent | a5f6138407efb6d8866fe8de5aac13454aefcd82 (diff) | |
download | libgit2-5540d9477ed143707435324e785336d254b12e47.tar.gz |
Implement global/system file search paths
The goal of this work is to expose the search logic for "global",
"system", and "xdg" files through the git_libgit2_opts() interface.
Behind the scenes, I changed the logic for finding files to have a
notion of a git_strarray that represents a search path and to store
a separate search path for each of the three tiers of config file.
For each tier, I implemented a function to initialize it to default
values (generally based on environment variables), and then general
interfaces to get it, set it, reset it, and prepend new directories
to it.
Next, I exposed these interfaces through the git_libgit2_opts
interface, reusing the GIT_CONFIG_LEVEL_SYSTEM, etc., constants
for the user to control which search path they were modifying.
There are alternative designs for the opts interface / argument
ordering, so I'm putting this phase out for discussion.
Additionally, I ended up doing a little bit of clean up regarding
attr.h and attr_file.h, adding a new attrcache.h so the other two
files wouldn't have to be included in so many places.
Diffstat (limited to 'include/git2/common.h')
-rw-r--r-- | include/git2/common.h | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/include/git2/common.h b/include/git2/common.h index 7066d5ea3..137ffa0a4 100644 --- a/include/git2/common.h +++ b/include/git2/common.h @@ -128,7 +128,10 @@ enum { GIT_OPT_GET_MWINDOW_SIZE, GIT_OPT_SET_MWINDOW_SIZE, GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, - GIT_OPT_SET_MWINDOW_MAPPED_LIMIT + GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, + GIT_OPT_GET_SEARCH_PATH, + GIT_OPT_SET_SEARCH_PATH, + GIT_OPT_PREPEND_SEARCH_PATH, }; /** @@ -136,17 +139,44 @@ enum { * * Available options: * - * opts(GIT_OPT_MWINDOW_SIZE, size_t): - * set the maximum mmap window size + * opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *): + * Get the maximum mmap window size * - * opts(GIT_OPT_MWINDOW_MAPPED_LIMIT, size_t): - * set the maximum amount of memory that can be mapped at any time + * opts(GIT_OPT_SET_MWINDOW_SIZE, size_t): + * Set the maximum mmap window size + * + * opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *): + * Get the maximum memory that will be mapped in total by the library + * + * opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t): + * Set the maximum amount of memory that can be mapped at any time * by the library * - * @param option Option key - * @param ... value to set the option + * opts(GIT_OPT_GET_SEARCH_PATH, const git_strarray **, int level) + * Get a strarray of the search path for a given level of config + * data. "level" must be one of GIT_CONFIG_LEVEL_SYSTEM, + * GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search + * path applies to shared attributes and ignore files, too. + * + * opts(GIT_OPT_SET_SEARCH_PATH, int level, const git_strarray *) + * Set the search path for a given level of config data. Passing + * NULL for the git_strarray pointer resets the search path to the + * default (which is generally based on environment variables). + * "level" must be one of GIT_CONFIG_LEVEL_SYSTEM, + * GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search + * path applies to shared attributes and ignore files, too. + * + * opts(GIT_OPT_PREPEND_SEARCH_PATH, int level, const git_strarray *) + * Prepend new directories to the search path for a given level of + * config data. "level" must be one of GIT_CONFIG_LEVEL_SYSTEM, + * GIT_CONFIG_LEVEL_GLOBAL, or GIT_CONFIG_LEVEL_XDG. The search + * path applies to shared attributes and ignore files, too. + * + * @param option Option key + * @param ... value to set the option + * @return 0 on success, <0 on failure */ -GIT_EXTERN(void) git_libgit2_opts(int option, ...); +GIT_EXTERN(int) git_libgit2_opts(int option, ...); /** @} */ GIT_END_DECL |