[PATCH stable] hgweb.cgi: fix internal WSGI emulation (issue3804)
Mads Kiilerich
mads at kiilerich.com
Mon Feb 4 09:51:27 CST 2013
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1359993046 -3600
# Branch stable
# Node ID 8fff1e69052818a40110eb00589742dd40bd2fde
# Parent 12de53323e59ce3e5f31472ee781649669d6ca9c
hgweb.cgi: fix internal WSGI emulation (issue3804)
The internal WSGI emulation in wsgicgi.py was not fully WSGI compliant and
assumed that all responses sent a body. With 3fbdbeab38cc that caused a real
bug when using hgweb.cgi.
wsgicgi.py will now make sure headers always are sent, using the pattern from
PEP 333 and similar to how it is done in c007e5c54b16.
diff --git a/mercurial/hgweb/wsgicgi.py b/mercurial/hgweb/wsgicgi.py
--- a/mercurial/hgweb/wsgicgi.py
+++ b/mercurial/hgweb/wsgicgi.py
@@ -77,5 +77,7 @@
try:
for chunk in content:
write(chunk)
+ if not headers_sent:
+ write('') # send headers now if body was empty
finally:
getattr(content, 'close', lambda : None)()
diff --git a/tests/test-clone-cgi.t b/tests/test-clone-cgi.t
--- a/tests/test-clone-cgi.t
+++ b/tests/test-clone-cgi.t
@@ -29,3 +29,11 @@
$ python hgweb.cgi >page1 2>&1
$ python "$TESTDIR/md5sum.py" page1
1f424bb22ec05c3c6bc866b6e67efe43 page1
+
+make sure headers are sent even when there is no body
+
+ $ QUERY_STRING="cmd=listkeys&namespace=nosuchnamespace" python hgweb.cgi
+ Status: 200 Script output follows\r (esc)
+ Content-Type: application/mercurial-0.1\r (esc)
+ Content-Length: 0\r (esc)
+ \r (esc)
More information about the Mercurial-devel
mailing list