# HG changeset patch # User Mads Kiilerich # Date 2013-01-15 19:54:57 # Node ID a4d7fd7ad1f754da1ae4ff047f1a3647812f81b5 # Parent e0c4f4ba624c640cf88407fec56459145f5fb52b serve: don't send any content headers with 304 responses Fixes HTTP protocol violation introduced in cf5c76017e11. 'hg serve' would show a stacktrace when loading pages that not had been modified. There was test coverage for this, but the wrong response headers wasn't shown and thus not detected. diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py +++ b/mercurial/hgweb/server.py @@ -153,7 +153,8 @@ class _httprequesthandler(BaseHTTPServer self.send_header(*h) if h[0].lower() == 'content-length': self.length = int(h[1]) - if self.length is None: + if (self.length is None and + saved_status[0] != common.HTTP_NOT_MODIFIED): self._chunked = (not self.close_connection and self.request_version == "HTTP/1.1") if self._chunked: diff --git a/tests/get-with-headers.py b/tests/get-with-headers.py --- a/tests/get-with-headers.py +++ b/tests/get-with-headers.py @@ -31,6 +31,8 @@ def request(host, path, show): conn.request("GET", '/' + path, None, headers) response = conn.getresponse() print response.status, reasons.get(response.reason, response.reason) + if show[:1] == ['-']: + show = [h for h, v in response.getheaders() if h.lower() not in show] for h in [h.lower() for h in show]: if response.getheader(h, None) is not None: print "%s: %s" % (h, response.getheader(h)) diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t --- a/tests/test-hgweb.t +++ b/tests/test-hgweb.t @@ -310,8 +310,10 @@ Test the access/error files are opened i static file - $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT 'static/style-gitweb.css' + $ "$TESTDIR/get-with-headers.py" --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server 200 Script output follows + content-length: 4619 + content-type: text/css body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; } a { color:#0000cc; }