From 778e1c739b1c9e06d5b3e3d5c965f4a63d40881f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Mon, 22 Aug 2011 15:43:57 +0200 Subject: [PATCH] Add git_remote_new MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As we no longer expose the transport functions, this is now the only way to connect to a remote when given an URL instead of a remote name Signed-off-by: Carlos Martín Nieto --- include/git2/remote.h | 12 ++++++++++++ src/remote.c | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/git2/remote.h b/include/git2/remote.h index a634b49c2..651e41075 100644 --- a/include/git2/remote.h +++ b/include/git2/remote.h @@ -45,6 +45,18 @@ GIT_BEGIN_DECL * - _del (needs support from config) */ +/** + * Create a new unnamed remote + * + * Useful when you don't want to store the remote + * + * @param out pointer to the new remote object + * @param repo the associtated repository + * @param url the remote repository's URL + * @return GIT_SUCCESS or an error message + */ +int git_remote_new(git_remote **out, git_repository *repo, const char *url); + /** * Get the information for a particular remote * diff --git a/src/remote.c b/src/remote.c index 765e93823..297789a69 100644 --- a/src/remote.c +++ b/src/remote.c @@ -74,6 +74,26 @@ 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) +{ + git_remote *remote; + + remote = git__malloc(sizeof(git_remote)); + if (remote == NULL) + return GIT_ENOMEM; + + memset(remote, 0x0, sizeof(git_remote)); + remote->repo = repo; + remote->url = git__strdup(url); + if (remote->url == NULL) { + free(remote); + return GIT_ENOMEM; + } + + *out = remote; + return GIT_SUCCESS; +} + int git_remote_get(git_remote **out, git_config *cfg, const char *name) { git_remote *remote;