summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/config.c12
-rw-r--r--tests/resources/config/.gitconfig1
-rw-r--r--tests/t15-config.c21
3 files changed, 31 insertions, 3 deletions
diff --git a/src/config.c b/src/config.c
index 29b9b799f..39a236ad9 100644
--- a/src/config.c
+++ b/src/config.c
@@ -310,13 +310,19 @@ int git_config_get_string(git_config *cfg, const char *name, const char **out)
{
file_internal *internal;
git_config_file *file;
+ int i, error;
if (cfg->files.length == 0)
return git__throw(GIT_EINVALIDARGS, "Cannot get variable value; no files open in the `git_config` instance");
- internal = git_vector_get(&cfg->files, 0);
- file = internal->file;
+ for (i = 0; i < cfg->files.length; ++i) {
+ internal = git_vector_get(&cfg->files, i);
+ file = internal->file;
+ error = file->get(file, name, out);
+ if (error == GIT_SUCCESS)
+ break;
+ }
- return file->get(file, name, out);
+ return error;
}
diff --git a/tests/resources/config/.gitconfig b/tests/resources/config/.gitconfig
index 8f8075b60..fa72bddfc 100644
--- a/tests/resources/config/.gitconfig
+++ b/tests/resources/config/.gitconfig
@@ -1,2 +1,3 @@
[core]
repositoryformatversion = 5
+ something = 2 \ No newline at end of file
diff --git a/tests/t15-config.c b/tests/t15-config.c
index 04b2fdea3..23a1792d5 100644
--- a/tests/t15-config.c
+++ b/tests/t15-config.c
@@ -230,6 +230,26 @@ BEGIN_TEST(config10, "a repo's config overrides the global config")
git_repository_free(repo);
END_TEST
+BEGIN_TEST(config11, "fall back to the global config")
+ git_repository *repo;
+ char home_orig[GIT_PATH_MAX];
+ char *home;
+ git_config *cfg;
+ int num;
+
+ home = getenv("HOME");
+ strcpy(home_orig, home);
+ setenv("HOME", CONFIG_BASE, 1);
+
+ must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
+ must_pass(git_repository_config(&cfg, repo));
+ setenv("HOME", home_orig, 1);
+ must_pass(git_config_get_int(cfg, "core.something", &num));
+ must_be_true(num == 2);
+ git_config_free(cfg);
+ git_repository_free(repo);
+END_TEST
+
BEGIN_SUITE(config)
ADD_TEST(config0);
ADD_TEST(config1);
@@ -242,4 +262,5 @@ BEGIN_SUITE(config)
ADD_TEST(config8);
ADD_TEST(config9);
ADD_TEST(config10);
+ ADD_TEST(config11);
END_SUITE