diff options
author | Linquize <linquize@yahoo.com.hk> | 2013-12-29 10:26:21 +0800 |
---|---|---|
committer | Linquize <linquize@yahoo.com.hk> | 2013-12-31 07:34:39 +0800 |
commit | fccadba25268ab6df6637265cb4912079e5ed10b (patch) | |
tree | 6460ddb90b0fad6a67904d03efd9573627e2a265 /src/submodule.c | |
parent | 868563cc925c3be5be569a130289abbf1ccd4943 (diff) | |
download | libgit2-fccadba25268ab6df6637265cb4912079e5ed10b.tar.gz |
Accept 'submodule.*.fetchRecurseSubmodules' config 'on-demand' value
Diffstat (limited to 'src/submodule.c')
-rw-r--r-- | src/submodule.c | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/src/submodule.c b/src/submodule.c index f6660a87e..f771a4d66 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -43,6 +43,12 @@ static git_cvar_map _sm_ignore_map[] = { {GIT_CVAR_TRUE, NULL, GIT_SUBMODULE_IGNORE_ALL}, }; +static git_cvar_map _sm_recurse_map[] = { + {GIT_CVAR_STRING, "on-demand", GIT_SUBMODULE_RECURSE_ONDEMAND}, + {GIT_CVAR_FALSE, NULL, GIT_SUBMODULE_RECURSE_NO}, + {GIT_CVAR_TRUE, NULL, GIT_SUBMODULE_RECURSE_YES}, +}; + static kh_inline khint_t str_hash_no_trailing_slash(const char *s) { khint_t h; @@ -428,6 +434,15 @@ 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; +} + int git_submodule_save(git_submodule *submodule) { int error = 0; @@ -469,10 +484,10 @@ int git_submodule_save(git_submodule *submodule) if (error < 0) goto cleanup; - if ((error = submodule_config_key_trunc_puts( - &key, "fetchRecurseSubmodules")) < 0 || - (error = git_config_file_set_string( - mods, key.ptr, submodule->fetch_recurse ? "true" : "false")) < 0) + if (!(error = submodule_config_key_trunc_puts(&key, "fetchRecurseSubmodules")) && + (val = git_submodule_recurse_to_str(submodule->fetch_recurse)) != NULL) + error = git_config_file_set_string(mods, key.ptr, val); + if (error < 0) goto cleanup; /* update internal defaults */ @@ -610,7 +625,7 @@ git_submodule_update_t git_submodule_set_update( return old; } -int git_submodule_fetch_recurse_submodules( +git_submodule_recurse_t git_submodule_fetch_recurse_submodules( git_submodule *submodule) { assert(submodule); @@ -619,14 +634,14 @@ int git_submodule_fetch_recurse_submodules( int git_submodule_set_fetch_recurse_submodules( git_submodule *submodule, - int fetch_recurse_submodules) + git_submodule_recurse_t fetch_recurse_submodules) { int old; assert(submodule); old = submodule->fetch_recurse; - submodule->fetch_recurse = (fetch_recurse_submodules != 0); + submodule->fetch_recurse = fetch_recurse_submodules; return old; } @@ -1080,6 +1095,20 @@ int git_submodule_parse_update(git_submodule_update_t *out, const char *value) return 0; } +int git_submodule_parse_recurse(git_submodule_recurse_t *out, const char *value) +{ + int val; + + if (git_config_lookup_map_value( + &val, _sm_recurse_map, ARRAY_SIZE(_sm_recurse_map), value) < 0) { + *out = GIT_SUBMODULE_RECURSE_YES; + return submodule_config_error("recurse", value); + } + + *out = (git_submodule_recurse_t)val; + return 0; +} + static int submodule_load_from_config( const git_config_entry *entry, void *payload) { @@ -1166,10 +1195,8 @@ static int submodule_load_from_config( sm->update_default = sm->update; } else if (strcasecmp(property, "fetchRecurseSubmodules") == 0) { - if (git__parse_bool(&sm->fetch_recurse, value) < 0) { - error = submodule_config_error("fetchRecurseSubmodules", value); - goto done; - } + if (git_submodule_parse_recurse(&sm->fetch_recurse, value) < 0) + return -1; } else if (strcasecmp(property, "ignore") == 0) { if ((error = git_submodule_parse_ignore(&sm->ignore, value)) < 0) |