Add git_remote_new 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 <carlos@cmartin.tk>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
diff --git a/include/git2/remote.h b/include/git2/remote.h
index a634b49..651e410 100644
--- a/include/git2/remote.h
+++ b/include/git2/remote.h
@@ -46,6 +46,18 @@ GIT_BEGIN_DECL
*/
/**
+ * 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
*
* @param out pointer to the new remote object
diff --git a/src/remote.c b/src/remote.c
index 765e938..297789a 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;