Subject: Re: [RFC 2/2] Add Git-aware CGI for Git-aware smart HTTP transport

From: Rogan Dawes <[email-masked]>
Date: Mon, 04 Aug 2008 11:53:32 +0200

Shawn O. Pearce wrote:

> Perhaps the smart server detection is something like:
> 
> 	Smart Server Detection
> 	----------------------
> 
> 	To detect a smart (Git-aware) server a client sends an
> 	empty POST request to info/refs; if a 200 OK response is
> 	received with the proper content type then the server can
> 	be assumed to be Git-aware, and the result contains the
> 	current info/refs data for that repository.
> 
> 		C: POST /repository.git/info/refs HTTP/1.0
> 		C: Content-Length: 0
> 
> 		S: HTTP/1.0 200 OK
> 		S: Content-Type: application/x-git-refs
> 		S:
> 		S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31	refs/heads/maint
> 
> Then clients should just attempt this POST first before issuing
> a GET info/refs.  Non Git-aware servers will issue an error code,
> and the client can retry with a standard GET request, and assume
> the server isn't a newer style.
> 

I don't understand why you would want to keep the commands in the URL 
when you are doing a POST?

How about something like:

	C: POST /repository.git/ HTTP/1.0
	C: Content-Length: <calculated>
         C:
         C: <whatever command you want>

A dumb server will respond with:

	S: HTTP/1.1 405 Method not allowed

(expected according to the RFC)

Or

	S: HTTP/1.1 404 Not Found

(resulting from testing against my own repo :-) )

While a smart server will respond with a "200 Ok" and the results of the 
command.

Also, if everything is done via POST, you don't have to worry about a 
wget-cloned server appearing to be "smart", since no "smarts" will ever 
be returned in response to a GET request (and to the best of my 
knowledge, wget can't mirror using POST).

Rogan