summaryrefslogtreecommitdiff
path: root/src/remote.c
diff options
context:
space:
mode:
authorVicent Martí <tanoku@gmail.com>2012-05-03 23:27:15 -0700
committerVicent Martí <tanoku@gmail.com>2012-05-03 23:27:15 -0700
commit5f8af1bcac3d982adf0bc37a0868e420161dc761 (patch)
treeda738a93013dcd6c92e9249385b72956b5b1a74b /src/remote.c
parent3fd99be98a91416dae77d65fe593965a0723fa8c (diff)
parent8e210931ca5d57b6ca7bc16b41598faa9339bc09 (diff)
downloadlibgit2-new-error-handling.tar.gz
Merge pull request #662 from carlosmn/remotesnew-error-handling
Add git_remote_add()
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/remote.c b/src/remote.c
index 98c256929..ca61091e0 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -54,7 +54,7 @@ static int parse_remote_refspec(git_config *cfg, git_refspec *refspec, const cha
return refspec_parse(refspec, val);
}
-int git_remote_new(git_remote **out, git_repository *repo, const char *url, const char *name)
+int git_remote_new(git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch)
{
git_remote *remote;
@@ -78,8 +78,17 @@ int git_remote_new(git_remote **out, git_repository *repo, const char *url, cons
GITERR_CHECK_ALLOC(remote->name);
}
+ if (fetch != NULL) {
+ if (refspec_parse(&remote->fetch, fetch) < 0)
+ goto on_error;
+ }
+
*out = remote;
return 0;
+
+on_error:
+ git_remote_free(remote);
+ return -1;
}
int git_remote_load(git_remote **out, git_repository *repo, const char *name)
@@ -470,3 +479,26 @@ int git_remote_list(git_strarray *remotes_list, git_repository *repo)
return 0;
}
+
+int git_remote_add(git_remote **out, git_repository *repo, const char *name, const char *url)
+{
+ git_buf buf = GIT_BUF_INIT;
+
+ if (git_buf_printf(&buf, "refs/heads/*:refs/remotes/%s/*", name) < 0)
+ return -1;
+
+ if (git_remote_new(out, repo, name, url, git_buf_cstr(&buf)) < 0)
+ goto on_error;
+
+ git_buf_free(&buf);
+
+ if (git_remote_save(*out) < 0)
+ goto on_error;
+
+ return 0;
+
+on_error:
+ git_buf_free(&buf);
+ git_remote_free(*out);
+ return -1;
+}