summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-04-20 15:25:39 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2013-04-20 17:54:12 +0200
commite5a27f039ee3ae1291fd5084707c3f9c168f10ba (patch)
treee54682c97ebb32f2f48445e2488d08316aa7fd2b
parent8f24e65ff6f7573bc6778f5bbea7119fc9b7b626 (diff)
downloadlibgit2-e5a27f039ee3ae1291fd5084707c3f9c168f10ba.tar.gz
config: allow setting multivars when none exist yet
Adding a multivar when there are no variables with that name set should set the variable instead of failing.
-rw-r--r--src/config_file.c4
-rw-r--r--tests-clar/config/multivar.c16
2 files changed, 19 insertions, 1 deletions
diff --git a/src/config_file.c b/src/config_file.c
index 8b51ab21b..01559221e 100644
--- a/src/config_file.c
+++ b/src/config_file.c
@@ -481,8 +481,10 @@ static int config_set_multivar(
pos = git_strmap_lookup_index(b->values, key);
if (!git_strmap_valid_index(b->values, pos)) {
+ /* If we don't have it, behave like a normal set */
+ result = config_set(cfg, name, value);
git__free(key);
- return GIT_ENOTFOUND;
+ return result;
}
var = git_strmap_value_at(b->values, pos);
diff --git a/tests-clar/config/multivar.c b/tests-clar/config/multivar.c
index 26537e20a..0bda6bcec 100644
--- a/tests-clar/config/multivar.c
+++ b/tests-clar/config/multivar.c
@@ -97,6 +97,22 @@ void test_config_multivar__add(void)
git_config_free(cfg);
}
+void test_config_multivar__add_new(void)
+{
+ const char *var = "a.brand.new";
+ git_config *cfg;
+ int n;
+
+ cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));
+
+ cl_git_pass(git_config_set_multivar(cfg, var, "", "variable"));
+ n = 0;
+ cl_git_pass(git_config_get_multivar(cfg, var, NULL, cb, &n));
+ cl_assert(n == 1);
+
+ git_config_free(cfg);
+}
+
void test_config_multivar__replace(void)
{
git_config *cfg;