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/strarray.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/strarray.h')
-rw-r--r-- | include/git2/strarray.h | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/include/git2/strarray.h b/include/git2/strarray.h index 6ea570c14..df34a5b88 100644 --- a/include/git2/strarray.h +++ b/include/git2/strarray.h @@ -43,8 +43,8 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); /** * Copy a string array object from source to target. * - * Note: target is overwritten and hence should be empty, - * otherwise its contents are leaked. + * Note: target is overwritten and hence should be empty, otherwise its + * contents are leaked. Call git_strarray_free() if necessary. * * @param tgt target * @param src source @@ -52,6 +52,32 @@ GIT_EXTERN(void) git_strarray_free(git_strarray *array); */ GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src); +/** + * Initialize a string array from a list of strings + * + * Note: target is overwritten and hence should be empty, otherwise its + * contents are leaked. Call git_strarray_free() if necessary. + * + * @param tgt target + * @param count number of strings to follow + * @return 0 on success, <0 on allocation failure + */ +GIT_EXTERN(int) git_strarray_set(git_strarray *tgt, size_t count, ...); + +/** + * Insert a strarray into the beginning of another + * + * In this case, tgt is an existing (initialized) strarray and the result + * will be reallocated with all the strings in src inserted before all of + * the existing strings in tgt. Strings in src will be strdup'ed, so + * you should still `git_strarray_free()` src when you are done with it. + * + * @param tgt strarray to update + * @param src strarray to copy from + * @return 0 on success, <0 on allocation failure (tgt will be unchanged) + */ +GIT_EXTERN(int) git_strarray_prepend(git_strarray *tgt, const git_strarray *src); + /** @} */ GIT_END_DECL |