Commit 2601fcfc1e1c22874d266dc7086532fa52f44dd5

Carlos Martín Nieto 2011-06-28T15:21:44

Add tests for deleting a config var Signed-off-by: Carlos Martín Nieto <cmn@elego.de>

diff --git a/include/git2/config.h b/include/git2/config.h
index 7500364..a8bff6c 100644
--- a/include/git2/config.h
+++ b/include/git2/config.h
@@ -254,7 +254,15 @@ GIT_EXTERN(int) git_config_set_bool(git_config *cfg, const char *name, int value
 GIT_EXTERN(int) git_config_set_string(git_config *cfg, const char *name, const char *value);
 
 /**
- * Perform an operation on each config variable
+ * Delete a config variable
+ *
+ * @param cfg the configuration
+ * @param name the variable to delete
+ */
+GIT_EXTERN(int) git_config_del(git_config *cfg, const char *name);
+
+/**
+ * Perform an operation on each config variable.
  *
  * The callback receives the normalized name and value of each variable
  * in the config backend, and the data pointer passed to this function.
diff --git a/tests/resources/config/config9 b/tests/resources/config/config9
index 4359c78..34fdc07 100644
--- a/tests/resources/config/config9
+++ b/tests/resources/config/config9
@@ -1,2 +1,3 @@
 [core]
+	dummy2 = 42
 	dummy = 1
diff --git a/tests/t15-config.c b/tests/t15-config.c
index 63fe8e1..25cdcbd 100644
--- a/tests/t15-config.c
+++ b/tests/t15-config.c
@@ -235,6 +235,34 @@ BEGIN_TEST(config11, "fall back to the global config")
 	git_repository_free(repo);
 END_TEST
 
+BEGIN_TEST(config12, "delete a value")
+	git_config *cfg;
+	int i;
+
+	/* By freeing the config, we make sure we flush the values  */
+	must_pass(git_config_open_ondisk(&cfg, CONFIG_BASE "/config9"));
+	must_pass(git_config_set_int(cfg, "core.dummy", 5));
+	git_config_free(cfg);
+
+	must_pass(git_config_open_ondisk(&cfg, CONFIG_BASE "/config9"));
+	must_pass(git_config_del(cfg, "core.dummy"));
+	git_config_free(cfg);
+
+	must_pass(git_config_open_ondisk(&cfg, CONFIG_BASE "/config9"));
+	must_be_true(git_config_get_int(cfg, "core.dummy", &i) == GIT_ENOTFOUND);
+	must_pass(git_config_set_int(cfg, "core.dummy", 1));
+	git_config_free(cfg);
+END_TEST
+
+BEGIN_TEST(config13, "can't delete a non-existent value")
+	git_config *cfg;
+
+	/* By freeing the config, we make sure we flush the values  */
+	must_pass(git_config_open_ondisk(&cfg, CONFIG_BASE "/config9"));
+	must_be_true(git_config_del(cfg, "core.imaginary") == GIT_ENOTFOUND);
+	git_config_free(cfg);
+END_TEST
+
 BEGIN_SUITE(config)
 	 ADD_TEST(config0);
 	 ADD_TEST(config1);
@@ -248,4 +276,6 @@ BEGIN_SUITE(config)
 	 ADD_TEST(config9);
 	 ADD_TEST(config10);
 	 ADD_TEST(config11);
+	 ADD_TEST(config12);
+	 ADD_TEST(config13);
 END_SUITE