Commit 59d6128e2730b71da6fdebbdf9a4d04b909e9721

Matt Burke 2015-09-04T09:36:50

Allow the world to set HTTP headers for remotes

diff --git a/include/git2/remote.h b/include/git2/remote.h
index 444fe52..40adca0 100644
--- a/include/git2/remote.h
+++ b/include/git2/remote.h
@@ -230,6 +230,9 @@ GIT_EXTERN(size_t) git_remote_refspec_count(const git_remote *remote);
  */
 GIT_EXTERN(const git_refspec *)git_remote_get_refspec(const git_remote *remote, size_t n);
 
+GIT_EXTERN(int) git_remote_extra_http_headers(const git_remote *remote, git_strarray *extra_http_headers);
+GIT_EXTERN(int) git_remote_set_extra_http_headers(git_remote *remote, const git_strarray extra_http_headers);
+
 /**
  * Open a connection to a remote
  *
diff --git a/src/remote.c b/src/remote.c
index b6fb87e..b7d82e7 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -1643,7 +1643,7 @@ void git_remote_free(git_remote *remote)
 	free_refspecs(&remote->passive_refspecs);
 	git_vector_free(&remote->passive_refspecs);
 
-	git__free(remote->extra_http_headers);
+	git_strarray_free(&remote->extra_http_headers);
 
 	git_push_free(remote->push);
 	git__free(remote->url);
@@ -2154,6 +2154,16 @@ size_t git_remote_refspec_count(const git_remote *remote)
 	return remote->refspecs.length;
 }
 
+int git_remote_extra_http_headers(const git_remote *remote, git_strarray *extra_http_headers)
+{
+	return git_strarray_copy(extra_http_headers, &remote->extra_http_headers);
+}
+
+int git_remote_set_extra_http_headers(git_remote *remote, const git_strarray extra_http_headers)
+{
+	return git_strarray_copy(&remote->extra_http_headers, &extra_http_headers);
+}
+
 const git_refspec *git_remote_get_refspec(const git_remote *remote, size_t n)
 {
 	return git_vector_get(&remote->refspecs, n);
diff --git a/src/remote.h b/src/remote.h
index bfb2036..3a15288 100644
--- a/src/remote.h
+++ b/src/remote.h
@@ -32,7 +32,7 @@ struct git_remote {
 	git_remote_autotag_option_t download_tags;
 	int prune_refs;
 	int passed_refspecs;
-	git_strarray *extra_http_headers;
+	git_strarray extra_http_headers;
 };
 
 const char* git_remote__urlfordirection(struct git_remote *remote, int direction);
diff --git a/src/transports/http.c b/src/transports/http.c
index 664cd80..3cd5632 100644
--- a/src/transports/http.c
+++ b/src/transports/http.c
@@ -974,7 +974,7 @@ static int http_action(
 	if ((!t->connection_data.host || !t->connection_data.port || !t->connection_data.path) &&
 		 (ret = gitno_connection_data_from_url(&t->connection_data, url, NULL)) < 0)
 		return ret;
-	t->connection_data.extra_headers = t->owner->owner->extra_http_headers;
+	t->connection_data.extra_headers = &t->owner->owner->extra_http_headers;
 
 	if ((ret = http_connect(t)) < 0)
 		return ret;