Commit 617bfdf47fbe307070dcd084a4e3ea410823c88c

Carlos Martín Nieto 2011-11-18T21:28:07

Add a name to a remote created from the API Make it a bit more resilient. Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>

diff --git a/include/git2/remote.h b/include/git2/remote.h
index 0781bb7..15d0aa3 100644
--- a/include/git2/remote.h
+++ b/include/git2/remote.h
@@ -28,16 +28,18 @@ GIT_BEGIN_DECL
  */
 
 /**
- * Create a new unnamed remote
+ * Create a remote in memory
  *
- * Useful when you don't want to store the remote
+ * Create a remote with the default refspecs in memory. You can use
+ * this when you have a URL instead of a remote's name.
  *
  * @param out pointer to the new remote object
  * @param repo the associtated repository
  * @param url the remote repository's URL
+ * @param name the remote's name
  * @return GIT_SUCCESS or an error code
  */
-int git_remote_new(git_remote **out, git_repository *repo, const char *url);
+int git_remote_new(git_remote **out, git_repository *repo, const char *url, const char *name);
 
 /**
  * Get the information for a particular remote
diff --git a/src/remote.c b/src/remote.c
index 6ac3bc1..d541cd0 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -56,22 +56,34 @@ 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)
+int git_remote_new(git_remote **out, git_repository *repo, const char *url, const char *name)
 {
 	git_remote *remote;
 
+	if (url == NULL)
+		return git__throw(GIT_EINVALIDARGS, "No URL was given");
+
 	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) {
 		git__free(remote);
 		return GIT_ENOMEM;
 	}
 
+	if (name != NULL) {
+		remote->name = git__strdup(name);
+		if (remote->name == NULL) {
+			git__free(remote);
+			return GIT_ENOMEM;
+		}
+	}
+
 	*out = remote;
 	return GIT_SUCCESS;
 }