summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-05-09 11:22:57 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-06-22 17:02:56 +0200
commitc4e3a3dbfa3abbe155d47d3040ecbb2c46242a48 (patch)
tree8d4bcafb33eab78e63176d563c32bcd69e61005e
parent15c381031391cbc24691f9bd009b991eaa440d25 (diff)
downloadlibgit2-c4e3a3dbfa3abbe155d47d3040ecbb2c46242a48.tar.gz
submodule: handle writing out all enum values for settings
We currently do not handle those enum values which require us to set "true" or unset variables in all cases. Use a common function which does understand this by looking at our mapping directly.
-rw-r--r--src/submodule.c82
-rw-r--r--src/submodule.h4
2 files changed, 21 insertions, 65 deletions
diff --git a/src/submodule.c b/src/submodule.c
index 738d57921..45163da1b 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -737,15 +737,6 @@ cleanup:
return error;
}
-const char *git_submodule_ignore_to_str(git_submodule_ignore_t ignore)
-{
- int i;
- for (i = 0; i < (int)ARRAY_SIZE(_sm_ignore_map); ++i)
- if (_sm_ignore_map[i].map_value == ignore)
- return _sm_ignore_map[i].str_match;
- return NULL;
-}
-
const char *git_submodule_update_to_str(git_submodule_update_t update)
{
int i;
@@ -755,15 +746,6 @@ const char *git_submodule_update_to_str(git_submodule_update_t update)
return NULL;
}
-const char *git_submodule_recurse_to_str(git_submodule_recurse_t recurse)
-{
- int i;
- for (i = 0; i < (int)ARRAY_SIZE(_sm_recurse_map); ++i)
- if (_sm_recurse_map[i].map_value == recurse)
- return _sm_recurse_map[i].str_match;
- return NULL;
-}
-
git_repository *git_submodule_owner(git_submodule *submodule)
{
assert(submodule);
@@ -834,6 +816,22 @@ cleanup:
return error;
}
+static int write_mapped_var(git_repository *repo, const char *name, git_cvar_map *maps, size_t nmaps, const char *var, int ival)
+{
+ git_cvar_t type;
+ const char *val;
+
+ if (git_config_lookup_map_enum(&type, &val, maps, nmaps, ival) < 0) {
+ giterr_set(GITERR_SUBMODULE, "invalid value for %s", var);
+ return -1;
+ }
+
+ if (type == GIT_CVAR_TRUE)
+ val = "true";
+
+ return write_var(repo, name, var, val);
+}
+
const char *git_submodule_branch(git_submodule *submodule)
{
assert(submodule);
@@ -905,18 +903,9 @@ git_submodule_ignore_t git_submodule_ignore(git_submodule *submodule)
int git_submodule_set_ignore(git_repository *repo, const char *name, git_submodule_ignore_t ignore)
{
- const char *val;
- int error;
-
- val = git_submodule_ignore_to_str(ignore);
- if (!val) {
- giterr_set(GITERR_SUBMODULE, "invalid ignore value");
- return -1;
- }
-
- error = write_var(repo, name, "ignore", val);
+ assert(repo && name);
- return error;
+ return write_mapped_var(repo, name, _sm_ignore_map, ARRAY_SIZE(_sm_ignore_map), "ignore", ignore);
}
git_submodule_update_t git_submodule_update_strategy(git_submodule *submodule)
@@ -928,18 +917,9 @@ git_submodule_update_t git_submodule_update_strategy(git_submodule *submodule)
int git_submodule_set_update(git_repository *repo, const char *name, git_submodule_update_t update)
{
- const char *val;
- int error;
-
- val = git_submodule_update_to_str(update);
- if (!val) {
- giterr_set(GITERR_SUBMODULE, "invalid update value");
- return -1;
- }
-
- error = write_var(repo, name, "update", val);
+ assert(repo && name);
- return error;
+ return write_mapped_var(repo, name, _sm_update_map, ARRAY_SIZE(_sm_update_map), "update", update);
}
git_submodule_recurse_t git_submodule_fetch_recurse_submodules(
@@ -951,29 +931,9 @@ git_submodule_recurse_t git_submodule_fetch_recurse_submodules(
int git_submodule_set_fetch_recurse_submodules(git_repository *repo, const char *name, git_submodule_recurse_t recurse)
{
- const char *val;
- int error;
-
assert(repo && name);
- val = git_submodule_recurse_to_str(recurse);
- if (!val) {
- switch (recurse) {
- case GIT_SUBMODULE_RECURSE_YES:
- val = "true";
- break;
- case GIT_SUBMODULE_RECURSE_NO:
- val = NULL;
- break;
- default:
- giterr_set(GITERR_SUBMODULE, "invalid recurse value");
- return -1;
- }
- }
-
- error = write_var(repo, name, "fetchRecurseSubmodules", val);
-
- return error;
+ return write_mapped_var(repo, name, _sm_recurse_map, ARRAY_SIZE(_sm_recurse_map), "fetchRecurseSubmodules", recurse);
}
static int submodule_repo_create(
diff --git a/src/submodule.h b/src/submodule.h
index d67796193..2ef2031b3 100644
--- a/src/submodule.h
+++ b/src/submodule.h
@@ -143,8 +143,4 @@ extern int git_submodule_parse_ignore(
extern int git_submodule_parse_update(
git_submodule_update_t *out, const char *value);
-extern const char *git_submodule_ignore_to_str(git_submodule_ignore_t);
-extern const char *git_submodule_update_to_str(git_submodule_update_t);
-extern const char *git_submodule_recurse_to_str(git_submodule_recurse_t);
-
#endif