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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
diff --git a/src/submodule.c b/src/submodule.c
index 738d579..45163da 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 d677961..2ef2031 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