All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tay Ray Chuan <rctay89@gmail.com>
To: Yaroslav Halchenko <debian@onerussian.com>
Cc: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>,
	"Shawn O. Pearce" <spearce@spearce.org>,
	git@vger.kernel.org
Subject: Re: problem cloning via http since v1.6.6-rc0
Date: Thu, 21 Jan 2010 15:51:36 +0800	[thread overview]
Message-ID: <20100121155136.17b59e8f.rctay89@gmail.com> (raw)
In-Reply-To: <be6fef0d1001202247l7467a14ap8181eb3ed830167a@mail.gmail.com>

Hi,

On Thu, 21 Jan 2010 14:47:37 +0800
Tay Ray Chuan <rctay89@gmail.com> wrote:
> On Thu, Jan 21, 2010 at 1:08 PM, Ilari Liusvaara
> <ilari.liusvaara@elisanet.fi> wrote:
> > Looks like remote-curl (which handles http) issues request for:
> >
> > '.../info/refs?service=git-upload-pack'
> >
> > And expects that if there is no smart HTTP server there for the request to be
> > interpretted as:
> >
> > '.../info/refs'
> >
> > (i.e. webserver would ignore the query). This isn't true for git.debian.org.
> > Requesting the latter works (and the data formatting looks sane), but the
> > former is 404. This causes the fetch to fail.
> 
> afaik, putting a "?var1=val1&var2=...." still makes it a normal GET
> request, even if the url requested is just a plain file and not some
> cgi handler that uses those variables/values.

Yaroslav, sorry for making you run in circles - it really is git's
fault (sorta).

In recent versions of git, we were sending out the GET request for
info/refs with a query string (?serivce=<service name>). I'm not sure
why, but your server is not playing nice when the query string is
appended.

Could you try this patch and see if it solves the issue? I manage to
clone your repo successfully with it.

-- 
Cheers,
Ray Chuan

-->8--
Subject: [PATCH] http/remote-curl: coddle picky servers

When "info/refs" is a static file and not behind a CGI handler, some
servers may not handle a GET request for it with a query string
appended (eg. "?foo=bar") properly.

If such a request fails, retry it sans the query string, and also
discount the possibility of using the "smart" protocol (since no
service is specified with "?service=<service name>").

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 remote-curl.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 1361006..a904164 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -102,7 +102,7 @@ static struct discovery* discover_refs(const char *service)
 	struct strbuf buffer = STRBUF_INIT;
 	struct discovery *last = last_discovery;
 	char *refs_url;
-	int http_ret, is_http = 0;
+	int http_ret, is_http = 0, proto_git_candidate = 1;
 
 	if (last && !strcmp(service, last->service))
 		return last;
@@ -121,6 +121,19 @@ static struct discovery* discover_refs(const char *service)
 
 	init_walker();
 	http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
+
+	/* try again with "plain" url (no ? or & appended) */
+	if (http_ret != HTTP_OK) {
+		free(refs_url);
+		strbuf_reset(&buffer);
+
+		proto_git_candidate = 0;
+		strbuf_addf(&buffer, "%s/info/refs", url);
+		refs_url = strbuf_detach(&buffer, NULL);
+
+		http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
+	}
+
 	switch (http_ret) {
 	case HTTP_OK:
 		break;
@@ -137,7 +150,8 @@ static struct discovery* discover_refs(const char *service)
 	last->buf_alloc = strbuf_detach(&buffer, &last->len);
 	last->buf = last->buf_alloc;
 
-	if (is_http && 5 <= last->len && last->buf[4] == '#') {
+	if (is_http && proto_git_candidate
+		&& 5 <= last->len && last->buf[4] == '#') {
 		/* smart HTTP response; validate that the service
 		 * pkt-line matches our request.
 		 */
-- 
1.6.6.1.337.g96bc8

  reply	other threads:[~2010-01-21  7:51 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-21  0:47 problem cloning via http since v1.6.6-rc0 Yaroslav Halchenko
2010-01-21  1:34 ` Tay Ray Chuan
2010-01-21  1:36 ` Tay Ray Chuan
2010-01-21  2:33   ` Yaroslav Halchenko
2010-01-21  4:01     ` Tay Ray Chuan
2010-01-21  4:38       ` Yaroslav Halchenko
2010-01-21  5:08 ` Ilari Liusvaara
2010-01-21  6:47   ` Tay Ray Chuan
2010-01-21  7:51     ` Tay Ray Chuan [this message]
2010-01-21 14:00       ` Yaroslav Halchenko
2010-01-21 14:41         ` [PATCH] http/remote-curl: coddle picky servers Tay Ray Chuan
2010-01-21 15:56           ` Shawn O. Pearce
2010-01-21 16:07             ` Mike Hommey
2010-01-21 16:10               ` git fetch -v not at all verbose? Michael S. Tsirkin
2010-01-21 16:18                 ` Shawn O. Pearce
2010-01-21 16:35                   ` Michael S. Tsirkin
2010-01-21 16:57                     ` Shawn O. Pearce
2010-01-21 17:30                       ` Michael S. Tsirkin
2010-01-21 17:47                         ` Thomas Rast
2010-01-21 17:42                       ` Junio C Hamano
2010-11-03  9:52                         ` Michael S. Tsirkin
2010-11-03 16:14                           ` Junio C Hamano
2010-01-21 16:20               ` [PATCH] http/remote-curl: coddle picky servers Tay Ray Chuan
2010-01-21 16:24                 ` Shawn O. Pearce
2010-01-21 16:34                   ` Mike Hommey
2010-01-21 16:34                 ` Mike Hommey
2010-01-21 10:35     ` problem cloning via http since v1.6.6-rc0 Ilari Liusvaara
2010-01-21 11:36       ` Tay Ray Chuan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100121155136.17b59e8f.rctay89@gmail.com \
    --to=rctay89@gmail.com \
    --cc=debian@onerussian.com \
    --cc=git@vger.kernel.org \
    --cc=ilari.liusvaara@elisanet.fi \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.