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 /src/attr.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 'src/attr.h')
-rw-r--r-- | src/attr.h | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/src/attr.h b/src/attr.h index 0fc33089b..19c979bcd 100644 --- a/src/attr.h +++ b/src/attr.h @@ -8,27 +8,13 @@ #define INCLUDE_attr_h__ #include "attr_file.h" -#include "strmap.h" - -#define GIT_ATTR_CONFIG "core.attributesfile" -#define GIT_ATTR_CONFIG_DEFAULT ".config/git/attributes" -#define GIT_IGNORE_CONFIG "core.excludesfile" -#define GIT_IGNORE_CONFIG_DEFAULT ".config/git/ignore" - -typedef struct { - int initialized; - git_pool pool; - git_strmap *files; /* hash path to git_attr_file of rules */ - git_strmap *macros; /* hash name to vector<git_attr_assignment> */ - const char *cfg_attr_file; /* cached value of core.attributesfile */ - const char *cfg_excl_file; /* cached value of core.excludesfile */ -} git_attr_cache; + +#define GIT_ATTR_CONFIG "core.attributesfile" +#define GIT_IGNORE_CONFIG "core.excludesfile" typedef int (*git_attr_file_parser)( git_repository *, void *, const char *, git_attr_file *); -extern int git_attr_cache__init(git_repository *repo); - extern int git_attr_cache__insert_macro( git_repository *repo, git_attr_rule *macro); |