summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-04-17 12:35:41 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2015-04-17 12:35:41 -0500
commita0e652d281dd2152d333675b25aa37307496e039 (patch)
tree429272b8d7f81f5df502fc4faaef36be5c7c2638 /src
parenta5bf599c9d2bd934823fbd99e73d6378289e5dfb (diff)
parent129788a623816e06eb502235451beeb87472cee0 (diff)
downloadlibgit2-a0e652d281dd2152d333675b25aa37307496e039.tar.gz
Merge pull request #2999 from pks-t/submodule-set-url
Implement git_submodule_set_branch.
Diffstat (limited to 'src')
-rw-r--r--src/submodule.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/submodule.c b/src/submodule.c
index c3bb6fe0e..d24a7773a 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -628,8 +628,17 @@ int git_submodule_save(git_submodule *submodule)
(error = git_config_file_set_string(mods, key.ptr, submodule->url)) < 0)
goto cleanup;
- if ((error = submodule_config_key_trunc_puts(&key, "branch")) < 0 ||
- (error = git_config_file_set_string(mods, key.ptr, submodule->branch)) < 0)
+ if ((error = submodule_config_key_trunc_puts(&key, "branch")) < 0)
+ goto cleanup;
+ if (submodule->branch == NULL)
+ error = git_config_file_delete(mods, key.ptr);
+ else
+ error = git_config_file_set_string(mods, key.ptr, submodule->branch);
+ if (error == GIT_ENOTFOUND) {
+ error = 0;
+ giterr_clear();
+ }
+ if (error < 0)
goto cleanup;
if (!(error = submodule_config_key_trunc_puts(&key, "update")) &&
@@ -715,6 +724,21 @@ const char *git_submodule_branch(git_submodule *submodule)
return submodule->branch;
}
+int git_submodule_set_branch(git_submodule *submodule, const char *branch)
+{
+ assert(submodule);
+
+ git__free(submodule->branch);
+ submodule->branch = NULL;
+
+ if (branch != NULL) {
+ submodule->branch = git__strdup(branch);
+ GITERR_CHECK_ALLOC(submodule->branch);
+ }
+
+ return 0;
+}
+
int git_submodule_set_url(git_submodule *submodule, const char *url)
{
assert(submodule && url);