[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 @@
         for chunk in content:
+        if not headers_sent:
+            write('')   # send headers now if body was empty
         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