]> git.proxmox.com Git - libgit2.git/commitdiff
config: don't special-case multivars that don't exist yet
authorCarlos Martín Nieto <cmn@dwim.me>
Mon, 21 Mar 2016 20:10:26 +0000 (21:10 +0100)
committerCarlos Martín Nieto <cmn@dwim.me>
Mon, 21 Mar 2016 21:25:12 +0000 (22:25 +0100)
This special-casing ignores that we might have a locked file, so the
hashtable does not represent the contents of the file we want to
write. This causes multivar writes to overwrite entries instead of add
to them when under lock.

There is no need for this as the normal code-path will write to the file
just fine, so simply get rid of it.

src/config_file.c
tests/config/multivar.c

index 584b9fa823cc06b430eea7a409faa45f40f943bc..02bb2f75e909545b10e82dcff7703a03824637a5 100644 (file)
@@ -561,31 +561,15 @@ static int config_set_multivar(
        git_config_backend *cfg, const char *name, const char *regexp, const char *value)
 {
        diskfile_backend *b = (diskfile_backend *)cfg;
-       refcounted_strmap *map;
-       git_strmap *values;
        char *key;
        regex_t preg;
        int result;
-       khiter_t pos;
 
        assert(regexp);
 
        if ((result = git_config__normalize_name(name, &key)) < 0)
                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);
        if (result != 0) {
                giterr_set_regex(&preg, result);
@@ -600,7 +584,6 @@ static int config_set_multivar(
        result = config_refresh(cfg);
 
 out:
-       refcounted_strmap_free(map);
        git__free(key);
        regfree(&preg);
 
index 0150089923355a43384d902e2bc325877ca65cb0..d1b8c4cda7dea470e209fd51ef4f7df3957f1ec3 100644 (file)
@@ -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_set_multivar(cfg, var, "", "variable"));
+       cl_git_pass(git_config_set_multivar(cfg, var, "$^", "variable"));
        n = 0;
        cl_git_pass(git_config_get_multivar_foreach(cfg, var, NULL, cb, &n));
        cl_assert_equal_i(n, 1);