Make http-push smarter about creating remote dirs
PATCH 1/1 Make http-push smarter about creating remote dirs
Remember object directories known to exist in the remote repo and don't bother trying to create them.
Signed-off-by Nick Hengeveld <[email protected]>
---
http-push.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-)
applies-to: 27732582039ada9c7781ce5a1583ee682e0452c6 9904bed158b8c297bfba8a8cff87644619688b62
http-push.c +9 -1
@@ -56,6 +56,7 @@ static int active_requests = 0;static int data_received;static int pushing =0 ;static int aborted =0 ; +static char remote_dir_exists[256 ];#ifdef USE_CURL_MULTI static int max_requests =-1 ;
@@ -669,6 +670,7 @@ static void finish_request(struct transfif (request->http_code ==404 ) { request->state =NEED_PUSH ; }else if (request->curl_result ==CURLE_OK ) { + remote_dir_exists[request->sha1[0 ]] =1 ; request->state =COMPLETE ; }else { fprintf(stderr, "HEAD %s failed, aborting (%d/%ld)\n",
@@ -680,6 +682,7 @@ static void finish_request(struct transf }else if (request->state ==RUN_MKCOL ) {if (request->curl_result ==CURLE_OK || request->http_code ==405 ) { + remote_dir_exists[request->sha1[0 ]] =1 ;start_put (request); }else { fprintf(stderr, "MKCOL %s failed, aborting (%d/%ld)\n",
@@ -790,7 +793,10 @@ void process_request_queue(void)start_check (request);curl_multi_perform (curlm, &num_transfers); }else if (pushing && request->state ==NEED_PUSH ) { -start_mkcol (request); +if (remote_dir_exists[request->sha1[0 ]]) +start_put (request); +else +start_mkcol (request);curl_multi_perform (curlm, &num_transfers); } request = request->next;
@@ -1622,6 +1628,8 @@ int main(int argc, char **argv)break ; } +memset (remote_dir_exists,0 ,256 ); +curl_global_init (CURL_GLOBAL_ALL );#ifdef USE_CURL_MULTI
---
0.99.9.GIT