summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-05-04 16:22:56 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-06-22 17:02:55 +0200
commit5a9fc6c83c2fd12ce312d1042ec2c1e6abad4033 (patch)
tree80f41e0481654c349adb9762d377d2599869bcb6 /src
parentdfda2f68ea9602a6b0d08e36bd48e6a4899b12ff (diff)
downloadlibgit2-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.c37
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)