summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2021-07-14 08:30:00 -0400
committerGitHub <noreply@github.com>2021-07-14 08:30:00 -0400
commit97cd165e21de4b44cf203dd3b660926a460705f4 (patch)
treeb1d9d314e1907ca2a44b24045232d97a1b766eec /src
parent95a2966f685a6a6edc9a7b40563df82e547f55eb (diff)
parent4bf136b0c33c0066e1a4da8c236b42d4f655073f (diff)
downloadlibgit2-97cd165e21de4b44cf203dd3b660926a460705f4.tar.gz
Merge pull request #5926 from Batchyx/batchyx/config-refresh-twice
config: fix included configs not refreshed more than once
Diffstat (limited to 'src')
-rw-r--r--src/config_file.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/config_file.c b/src/config_file.c
index 7fba71a98..5267beb94 100644
--- a/src/config_file.c
+++ b/src/config_file.c
@@ -164,23 +164,27 @@ out:
return error;
}
+static void config_file_clear_includes(config_file_backend* cfg)
+{
+ config_file *include;
+ uint32_t i;
+
+ git_array_foreach(cfg->file.includes, i, include)
+ config_file_clear(include);
+ git_array_clear(cfg->file.includes);
+}
+
static int config_file_set_entries(git_config_backend *cfg, git_config_entries *entries)
{
config_file_backend *b = GIT_CONTAINER_OF(cfg, config_file_backend, parent);
git_config_entries *old = NULL;
- config_file *include;
int error;
- uint32_t i;
if (b->parent.readonly) {
git_error_set(GIT_ERROR_CONFIG, "this backend is read-only");
return -1;
}
- git_array_foreach(b->file.includes, i, include)
- config_file_clear(include);
- git_array_clear(b->file.includes);
-
if ((error = git_mutex_lock(&b->values_mutex)) < 0) {
git_error_set(GIT_ERROR_OS, "failed to lock config backend");
goto out;
@@ -202,6 +206,8 @@ static int config_file_refresh_from_buffer(git_config_backend *cfg, const char *
git_config_entries *entries = NULL;
int error;
+ config_file_clear_includes(b);
+
if ((error = git_config_entries_new(&entries)) < 0 ||
(error = config_file_read_buffer(entries, b->repo, &b->file,
b->level, 0, buf, buflen)) < 0 ||
@@ -229,6 +235,8 @@ static int config_file_refresh(git_config_backend *cfg)
if (!modified)
return 0;
+ config_file_clear_includes(b);
+
if ((error = git_config_entries_new(&entries)) < 0 ||
(error = config_file_read(entries, b->repo, &b->file, b->level, 0)) < 0 ||
(error = config_file_set_entries(cfg, entries)) < 0)