mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
Merge branch 'jk/maint-http-init-not-in-result-handler'
Further clean-up to the http codepath that picks up results after cURL library is done with one request slot. * jk/maint-http-init-not-in-result-handler: http: do not set up curl auth after a 401 remote-curl: do not call run_slot repeatedly
This commit is contained in:
commit
58f3f9893d
6
http.c
6
http.c
@ -745,8 +745,7 @@ char *get_remote_object_url(const char *url, const char *hex,
|
||||
return strbuf_detach(&buf, NULL);
|
||||
}
|
||||
|
||||
int handle_curl_result(struct active_request_slot *slot,
|
||||
struct slot_results *results)
|
||||
int handle_curl_result(struct slot_results *results)
|
||||
{
|
||||
if (results->curl_result == CURLE_OK) {
|
||||
credential_approve(&http_auth);
|
||||
@ -759,7 +758,6 @@ int handle_curl_result(struct active_request_slot *slot,
|
||||
return HTTP_NOAUTH;
|
||||
} else {
|
||||
credential_fill(&http_auth);
|
||||
init_curl_http_auth(slot->curl);
|
||||
return HTTP_REAUTH;
|
||||
}
|
||||
} else {
|
||||
@ -821,7 +819,7 @@ static int http_request(const char *url, void *result, int target, int options)
|
||||
|
||||
if (start_active_slot(slot)) {
|
||||
run_active_slot(slot);
|
||||
ret = handle_curl_result(slot, &results);
|
||||
ret = handle_curl_result(&results);
|
||||
} else {
|
||||
error("Unable to start HTTP request for %s", url);
|
||||
ret = HTTP_START_FAILED;
|
||||
|
3
http.h
3
http.h
@ -78,8 +78,7 @@ extern int start_active_slot(struct active_request_slot *slot);
|
||||
extern void run_active_slot(struct active_request_slot *slot);
|
||||
extern void finish_active_slot(struct active_request_slot *slot);
|
||||
extern void finish_all_active_slots(void);
|
||||
extern int handle_curl_result(struct active_request_slot *slot,
|
||||
struct slot_results *results);
|
||||
extern int handle_curl_result(struct slot_results *results);
|
||||
|
||||
#ifdef USE_CURL_MULTI
|
||||
extern void fill_active_slots(void);
|
||||
|
@ -356,7 +356,7 @@ static int run_slot(struct active_request_slot *slot)
|
||||
slot->curl_result = curl_easy_perform(slot->curl);
|
||||
finish_active_slot(slot);
|
||||
|
||||
err = handle_curl_result(slot, &results);
|
||||
err = handle_curl_result(&results);
|
||||
if (err != HTTP_OK && err != HTTP_REAUTH) {
|
||||
error("RPC failed; result=%d, HTTP code = %ld",
|
||||
results.curl_result, results.http_code);
|
||||
@ -431,6 +431,11 @@ static int post_rpc(struct rpc_state *rpc)
|
||||
return -1;
|
||||
}
|
||||
|
||||
headers = curl_slist_append(headers, rpc->hdr_content_type);
|
||||
headers = curl_slist_append(headers, rpc->hdr_accept);
|
||||
headers = curl_slist_append(headers, "Expect:");
|
||||
|
||||
retry:
|
||||
slot = get_active_slot();
|
||||
|
||||
curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
|
||||
@ -438,10 +443,6 @@ static int post_rpc(struct rpc_state *rpc)
|
||||
curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
|
||||
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");
|
||||
|
||||
headers = curl_slist_append(headers, rpc->hdr_content_type);
|
||||
headers = curl_slist_append(headers, rpc->hdr_accept);
|
||||
headers = curl_slist_append(headers, "Expect:");
|
||||
|
||||
if (large_request) {
|
||||
/* The request body is large and the size cannot be predicted.
|
||||
* We must use chunked encoding to send it.
|
||||
@ -515,9 +516,9 @@ static int post_rpc(struct rpc_state *rpc)
|
||||
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, rpc_in);
|
||||
curl_easy_setopt(slot->curl, CURLOPT_FILE, rpc);
|
||||
|
||||
do {
|
||||
err = run_slot(slot);
|
||||
} while (err == HTTP_REAUTH && !large_request && !use_gzip);
|
||||
err = run_slot(slot);
|
||||
if (err == HTTP_REAUTH && !large_request && !use_gzip)
|
||||
goto retry;
|
||||
if (err != HTTP_OK)
|
||||
err = -1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user