Commit 15c381031391cbc24691f9bd009b991eaa440d25

Carlos Martín Nieto 2015-05-09T11:22:27

config: provide a function to reverse-lookup mapped cvars

diff --git a/src/config.c b/src/config.c
index 1400b95..77cf573 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1194,6 +1194,26 @@ fail_parse:
 	return -1;
 }
 
+int git_config_lookup_map_enum(git_cvar_t *type_out, const char **str_out,
+			       const git_cvar_map *maps, size_t map_n, int enum_val)
+{
+	size_t i;
+
+	for (i = 0; i < map_n; i++) {
+		const git_cvar_map *m = &maps[i];
+
+		if (m->map_value != enum_val)
+			continue;
+
+		*type_out = m->cvar_type;
+		*str_out = m->str_match;
+		return 0;
+	}
+
+	giterr_set(GITERR_CONFIG, "invalid enum value");
+	return GIT_ENOTFOUND;
+}
+
 int git_config_parse_bool(int *out, const char *value)
 {
 	if (git__parse_bool(out, value) == 0)
diff --git a/src/config.h b/src/config.h
index 691868b..f257cc9 100644
--- a/src/config.h
+++ b/src/config.h
@@ -82,4 +82,10 @@ extern int git_config__get_int_force(
 extern int git_config__cvar(
 	int *out, git_config *config, git_cvar_cached cvar);
 
+/**
+ * The opposite of git_config_lookup_map_value, we take an enum value
+ * and map it to the string or bool value on the config.
+ */
+int git_config_lookup_map_enum(git_cvar_t *type_out, const char **str_out,
+			       const git_cvar_map *maps, size_t map_n, int enum_val);
 #endif