Commit f3dad3ac by Carlos Martín Nieto Committed by Vicent Marti

Add fall-back support to the configuration

If a config has several files, we need to check all of them before we
can say that a variable doesn't exist.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
parent 3de5df7d
......@@ -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;
}
[core]
repositoryformatversion = 5
something = 2
\ No newline at end of file
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment