* [PATCH 2/4] Support remote references with slashes in their names
@ 2005-11-04 22:22 Nick Hengeveld
0 siblings, 0 replies; only message in thread
From: Nick Hengeveld @ 2005-11-04 22:22 UTC (permalink / raw)
To: git
Support remote references with slashes in their names
Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
---
http-push.c | 42 +++++++++++++++++++++++++++++++++++++++---
1 files changed, 39 insertions(+), 3 deletions(-)
applies-to: 54e1d462248523bfac7d7c4b42e3b1ce1270fbd9
33cd543dfe656dce9c5722e4fe6af22fa5a80e7e
diff --git a/http-push.c b/http-push.c
index 134d405..6a241aa 100644
--- a/http-push.c
+++ b/http-push.c
@@ -1066,12 +1066,44 @@ char *lock_remote(char *file, int timeou
struct buffer out_buffer;
char *out_data;
char *url;
+ char *ep;
char timeout_header[25];
struct curl_slist *dav_headers = NULL;
if (lock_token != NULL)
free(lock_token);
+ url = xmalloc(strlen(remote->url) + strlen(file) + 1);
+ sprintf(url, "%s%s", remote->url, file);
+
+ /* Make sure leading directories exist for the remote ref */
+ ep = strchr(url + strlen(remote->url) + 11, '/');
+ while (ep) {
+ *ep = 0;
+ slot = get_active_slot();
+ curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
+ curl_easy_setopt(slot->curl, CURLOPT_URL, url);
+ curl_easy_setopt(slot->curl, CURLOPT_CUSTOMREQUEST, DAV_MKCOL);
+ curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, fwrite_null);
+ if (start_active_slot(slot)) {
+ run_active_slot(slot);
+ if (slot->curl_result != CURLE_OK &&
+ slot->http_code != 405) {
+ fprintf(stderr,
+ "Unable to create branch path %s\n",
+ url);
+ free(url);
+ return NULL;
+ }
+ } else {
+ fprintf(stderr, "Unable to start request\n");
+ free(url);
+ return NULL;
+ }
+ *ep = '/';
+ ep = strchr(ep + 1, '/');
+ }
+
out_buffer.size = strlen(LOCK_REQUEST) + strlen(git_default_email) - 2;
out_data = xmalloc(out_buffer.size + 1);
snprintf(out_data, out_buffer.size + 1, LOCK_REQUEST, git_default_email);
@@ -1079,8 +1111,6 @@ char *lock_remote(char *file, int timeou
out_buffer.buffer = out_data;
sprintf(timeout_header, "Timeout: Second-%d", timeout);
- url = xmalloc(strlen(remote->url) + strlen(file) + 1);
- sprintf(url, "%s%s", remote->url, file);
dav_headers = curl_slist_append(dav_headers, timeout_header);
dav_headers = curl_slist_append(dav_headers, "Content-Type: text/xml");
@@ -1098,16 +1128,22 @@ char *lock_remote(char *file, int timeou
if (start_active_slot(slot)) {
run_active_slot(slot);
- free(out_data);
if (slot->curl_result != CURLE_OK) {
fprintf(stderr, "Got HTTP error %ld\n", slot->http_code);
+ free(url);
+ free(out_data);
return NULL;
}
} else {
+ free(url);
free(out_data);
fprintf(stderr, "Unable to start request\n");
+ return NULL;
}
+ free(url);
+ free(out_data);
+
return strdup(lock_token);
}
---
0.99.9.GIT
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2005-11-04 22:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-04 22:22 [PATCH 2/4] Support remote references with slashes in their names Nick Hengeveld
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).