Support remote references with slashes in their names
PATCH 2/4 Support remote references with slashes in their names
Support remote references with slashes in their names
Signed-off-by Nick Hengeveld <[email protected]>
---
http-push.c | 42 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 39 insertions(+), 3 deletions(-)
applies-to: 54e1d462248523bfac7d7c4b42e3b1ce1270fbd9 33cd543dfe656dce9c5722e4fe6af22fa5a80e7e
http-push.c +39 -3
@@ -1066,12 +1066,44 @@ char *lock_remote(char *file, int timeoustruct 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 timeouif (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