diff options
| author | Carlos Martín Nieto <cmn@dwim.me> | 2015-05-04 16:22:56 +0200 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-06-22 17:02:55 +0200 |
| commit | 5a9fc6c83c2fd12ce312d1042ec2c1e6abad4033 (patch) | |
| tree | 80f41e0481654c349adb9762d377d2599869bcb6 /src | |
| parent | dfda2f68ea9602a6b0d08e36bd48e6a4899b12ff (diff) | |
| download | libgit2-5a9fc6c83c2fd12ce312d1042ec2c1e6abad4033.tar.gz | |
submodule: make set_ignore() affect the configuration
Instead of affecting a particular instance, make it change the
configuration.
Diffstat (limited to 'src')
| -rw-r--r-- | src/submodule.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/submodule.c b/src/submodule.c index 9a1485436..78bf5198c 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -754,12 +754,6 @@ int git_submodule_save(git_submodule *submodule) if (error < 0) goto cleanup; - if (!(error = submodule_config_key_trunc_puts(&key, "ignore")) && - (val = git_submodule_ignore_to_str(submodule->ignore)) != NULL) - error = git_config_file_set_string(mods, key.ptr, val); - if (error < 0) - goto cleanup; - 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); @@ -906,19 +900,32 @@ git_submodule_ignore_t git_submodule_ignore(git_submodule *submodule) GIT_SUBMODULE_IGNORE_NONE : submodule->ignore; } -git_submodule_ignore_t git_submodule_set_ignore( - git_submodule *submodule, git_submodule_ignore_t ignore) +int git_submodule_set_ignore(git_repository *repo, const char *name, git_submodule_ignore_t ignore) { - git_submodule_ignore_t old; + git_buf key = GIT_BUF_INIT; + git_config_backend *mods; + const char *val; + int error; - assert(submodule); + val = git_submodule_ignore_to_str(ignore); + if (!val) { + giterr_set(GITERR_SUBMODULE, "invalid ignore value"); + return -1; + } - if (ignore == GIT_SUBMODULE_IGNORE_RESET) - ignore = submodule->ignore_default; + mods = open_gitmodules(repo, GITMODULES_CREATE); + if (!mods) + return -1; - old = submodule->ignore; - submodule->ignore = ignore; - return old; + if ((error = git_buf_printf(&key, "submodule.%s.ignore", name)) < 0) + goto cleanup; + + error = git_config_file_set_string(mods, key.ptr, val); + git_buf_free(&key); + +cleanup: + git_config_file_free(mods); + return error; } git_submodule_update_t git_submodule_update_strategy(git_submodule *submodule) |
