Commit b085ecbe by Edward Thomson

Merge pull request #3703 from libgit2/cmn/multivar-set-locked

config: don't special-case multivars that don't exist yet
parents e89abec6 6f09911c
...@@ -561,31 +561,15 @@ static int config_set_multivar( ...@@ -561,31 +561,15 @@ static int config_set_multivar(
git_config_backend *cfg, const char *name, const char *regexp, const char *value) git_config_backend *cfg, const char *name, const char *regexp, const char *value)
{ {
diskfile_backend *b = (diskfile_backend *)cfg; diskfile_backend *b = (diskfile_backend *)cfg;
refcounted_strmap *map;
git_strmap *values;
char *key; char *key;
regex_t preg; regex_t preg;
int result; int result;
khiter_t pos;
assert(regexp); assert(regexp);
if ((result = git_config__normalize_name(name, &key)) < 0) if ((result = git_config__normalize_name(name, &key)) < 0)
return result; return result;
if ((map = refcounted_strmap_take(&b->header)) == NULL)
return -1;
values = b->header.values->values;
pos = git_strmap_lookup_index(values, key);
if (!git_strmap_valid_index(values, pos)) {
/* If we don't have it, behave like a normal set */
result = config_set(cfg, name, value);
refcounted_strmap_free(map);
git__free(key);
return result;
}
result = regcomp(&preg, regexp, REG_EXTENDED); result = regcomp(&preg, regexp, REG_EXTENDED);
if (result != 0) { if (result != 0) {
giterr_set_regex(&preg, result); giterr_set_regex(&preg, result);
...@@ -600,7 +584,6 @@ static int config_set_multivar( ...@@ -600,7 +584,6 @@ static int config_set_multivar(
result = config_refresh(cfg); result = config_refresh(cfg);
out: out:
refcounted_strmap_free(map);
git__free(key); git__free(key);
regfree(&preg); regfree(&preg);
......
...@@ -163,7 +163,7 @@ void test_config_multivar__add_new(void) ...@@ -163,7 +163,7 @@ void test_config_multivar__add_new(void)
cl_git_pass(git_config_open_ondisk(&cfg, "config/config11")); cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));
cl_git_pass(git_config_set_multivar(cfg, var, "", "variable")); cl_git_pass(git_config_set_multivar(cfg, var, "$^", "variable"));
n = 0; n = 0;
cl_git_pass(git_config_get_multivar_foreach(cfg, var, NULL, cb, &n)); cl_git_pass(git_config_get_multivar_foreach(cfg, var, NULL, cb, &n));
cl_assert_equal_i(n, 1); cl_assert_equal_i(n, 1);
......
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