When the remote HTTP server returns a redirect the default libcurl action is to change a POST request into a GET request while following the redirect, but the remote http backend does not expect that. Tell libcurl to always keep the POST request. Signed-off-by: Andreas Schwab <schwab@xxxxxxxxxxxxxx> --- Andreas Schwab <schwab@xxxxxxxxxxxxxx> writes: > Ilari Liusvaara <ilari.liusvaara@xxxxxxxxxxx> writes: > >> On Sat, Sep 18, 2010 at 01:33:48PM +0900, Miles Bader wrote: >> >>> The savannah.gnu.org admins are trying out the git "smart http" server, >>> but it doesn't seem to handle http redirects properly... should it? >>> Is this a bug with the git server? >>> >>> The follow is from Sylvain Beucler; >>> > Hmmm, actually it works, but it doesn't support a HTTP redirect >>> > (namely git.sv.gnu.org -> git.savannah.gnu.org). >>> > >>> > $ git clone http://git.sv.gnu.org/r/freedink.git >>> > Initialized empty Git repository in /tmp/freedink/.git/ >>> > error: RPC failed; result=22, HTTP code = 405 >> >> 405 (Method not allowed)? Can you see what request it is trying to send >> and to where (the request that fails with 405 that is)? > > I think this is a bug in the apache setup at savannnah. It is > responding to POST .../git-upload-pack with both 301 and 405. This does > not happen if you use the redirected address directly. Looking closer, this is actually a bug in git. It does not set the POSTREDIR option, so that libcurl changes the POST into GET when following a redirection. Andreas. --- remote-curl.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/remote-curl.c b/remote-curl.c index 04d4813..309b024 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -393,6 +393,7 @@ static int post_rpc(struct rpc_state *rpc) curl_easy_setopt(slot->curl, CURLOPT_POST, 1); curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url); curl_easy_setopt(slot->curl, CURLOPT_ENCODING, ""); + curl_easy_setopt(slot->curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL); headers = curl_slist_append(headers, rpc->hdr_content_type); headers = curl_slist_append(headers, rpc->hdr_accept); -- 1.7.2.3 -- Andreas Schwab, schwab@xxxxxxxxxxxxxx GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html