aboutsummaryrefslogtreecommitdiff
path: root/repository.c
diff options
context:
space:
mode:
authorBrandon Williams <bmwill@google.com>2017-06-22 11:43:42 -0700
committerJunio C Hamano <gitster@pobox.com>2017-06-23 18:24:34 -0700
commit3b256228a66f8587661481ef3e08259864f3ba2a (patch)
tree48cfbc45513a2a89479c3a39b8f1d76e13135c04 /repository.c
parentb42b0c09199db794b2a34ae9ce293d6711fb6a4f (diff)
downloadgit-3b256228a66f8587661481ef3e08259864f3ba2a.tar.gz
git-3b256228a66f8587661481ef3e08259864f3ba2a.tar.xz
config: read config from a repository object
Teach the config machinery to read config information from a repository object. This involves storing a 'struct config_set' inside the repository object and adding a number of functions (repo_config*) to be able to query a repository's config. The current config API enables lazy-loading of the config. This means that when 'git_config_get_int()' is called, if the_config_set hasn't been populated yet, then it will be populated and properly initialized by reading the necessary config files (system wide .gitconfig, user's home .gitconfig, and the repository's config). To maintain this paradigm, the new API to read from a repository object's config will also perform this lazy-initialization. Since both APIs (git_config_get* and repo_config_get*) have the same semantics we can migrate the default config to be stored within 'the_repository' and just have the 'git_config_get*' family of functions redirect to the 'repo_config_get*' functions. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'repository.c')
-rw-r--r--repository.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/repository.c b/repository.c
index cf440405a..686a964ad 100644
--- a/repository.c
+++ b/repository.c
@@ -1,5 +1,6 @@
#include "cache.h"
#include "repository.h"
+#include "config.h"
/* The main repository */
static struct repository the_repo;
@@ -156,4 +157,10 @@ void repo_clear(struct repository *repo)
repo->index_file = NULL;
free(repo->worktree);
repo->worktree = NULL;
+
+ if (repo->config) {
+ git_configset_clear(repo->config);
+ free(repo->config);
+ repo->config = NULL;
+ }
}