[PATCH 2 of 2] server: support absolute urls (issue4877)
timeless
timeless at gmail.com
Sun Oct 4 15:41:11 CDT 2015
It isn't just query, since a ";" section is also allowed (and split out by
the module)...
I'll see about updating this mid-week
On Oct 4, 2015 1:07 PM, "Gregory Szorc" <gregory.szorc at gmail.com> wrote:
> On Fri, Oct 2, 2015 at 1:19 PM, <timeless at mozdev.org> wrote:
>
>> # HG changeset patch
>> # User timeless at mozdev.org
>> # Date 1443813482 14400
>> # Fri Oct 02 15:18:02 2015 -0400
>> # Node ID 3afa079854db8653131291e10db34cf3bc440e35
>> # Parent 8bd5471f48ec17944c641e3b7fbb8a2d9a8f1865
>> server: support absolute urls (issue4877)
>>
>> rfc2616 sec 5.1.2 says they should work;
>> tests on OS X 10.6 / Python 2.6 fail because
>> hg+tinyproxy generate these urls.
>>
>> curl with tinyproxy:
>> "GET /?cmd=capabilities HTTP/1.1" 200 -
>> hg with tinyproxy:
>> "GET https://localhost:.../?cmd=capabilities HTTP/1.1" 404 -
>>
>> diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py
>> --- a/mercurial/hgweb/server.py
>> +++ b/mercurial/hgweb/server.py
>> @@ -7,6 +7,7 @@
>> # GNU General Public License version 2 or any later version.
>>
>> import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer,
>> traceback
>> +from urlparse import urlparse
>> from mercurial import util, error
>> from mercurial.hgweb import common
>> from mercurial.i18n import _
>> @@ -90,9 +91,26 @@
>> self.do_POST()
>>
>> def do_hgweb(self):
>> + env = {}
>> + parsed = urlparse(self.path)
>> + if parsed.scheme and parsed.netloc:
>> + #
>> http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
>
>
> This should be referencing RFC 7230 since it obsoletes 2616.
>
>
>>
>> + # To allow for transition to absoluteURIs in all requests in
>> + # future versions of HTTP, all HTTP/1.1 servers MUST accept
>> the
>> + # absoluteURI form in requests, even though HTTP/1.1 clients
>> will
>> + # only generate them in requests to proxies.
>> + server = parsed.netloc
>> + self.path = self.path[self.path.find(server) + len(server):]
>>
>
> I'd feel better if this used the parsed URL object to extract the path.
> Should just be concatenation of its path and optional query string. You
> could also set "path" and "query" right here and move the _splitURI bit
> below into an else block.
>
>
>> + colon = server.rfind(':')
>> + if colon > 1:
>> + server = server[:colon]
>> + #
>> https://www.python.org/dev/peps/pep-0333/#environ-variables
>> + # Note, however, that HTTP_HOST , if present, should be used
>> in
>> + # preference to SERVER_NAME for reconstructing the request
>> URL.
>> + # See the URL Reconstruction section below for more detail.
>> + env['HTTP_HOST'] = server
>> path, query = _splitURI(self.path)
>>
>> - env = {}
>> env['GATEWAY_INTERFACE'] = 'CGI/1.1'
>> env['REQUEST_METHOD'] = self.command
>> env['SERVER_NAME'] = self.server.server_name
>> diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t
>> --- a/tests/test-hgweb.t
>> +++ b/tests/test-hgweb.t
>> @@ -16,6 +16,10 @@
>> $ hg serve -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E
>> errors.log
>> $ cat hg.pid >> $DAEMON_PIDS
>>
>> +supports rfcXXX gets
>> + $ (get-with-headers.py localhost:$HGPORT --headeronly
>> "http://localhost:$HGPORT/?cmd=capabilities")
>> + 200 Script output follows
>> +
>> manifest
>>
>> $ (get-with-headers.py localhost:$HGPORT 'file/tip/?style=raw')
>> @@ -334,7 +338,7 @@
>> Test the access/error files are opened in append mode
>>
>> $ $PYTHON -c "print len(file('access.log').readlines()), 'log lines
>> written'"
>> - 14 log lines written
>> + 15 log lines written
>>
>> static file
>>
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> https://selenic.com/mailman/listinfo/mercurial-devel
>>
>
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20151004/81bc920d/attachment.html>
More information about the Mercurial-devel
mailing list