# HG changeset patch # User Mads Kiilerich # Date 1360016725 -3600 # Node ID e8efcc8ff5c0b1b16f2a6f22f4375c0002133aff # 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 -r 12de53323e59 -r e8efcc8ff5c0 mercurial/hgweb/wsgicgi.py --- a/mercurial/hgweb/wsgicgi.py Sun Feb 03 14:26:39 2013 -0800 +++ b/mercurial/hgweb/wsgicgi.py Mon Feb 04 23:25:25 2013 +0100 @@ -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 -r 12de53323e59 -r e8efcc8ff5c0 tests/test-clone-cgi.t --- a/tests/test-clone-cgi.t Sun Feb 03 14:26:39 2013 -0800 +++ b/tests/test-clone-cgi.t Mon Feb 04 23:25:25 2013 +0100 @@ -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) diff -r 12de53323e59 -r e8efcc8ff5c0 tests/test-hgweb-commands.t --- a/tests/test-hgweb-commands.t Sun Feb 03 14:26:39 2013 -0800 +++ b/tests/test-hgweb-commands.t Mon Feb 04 23:25:25 2013 +0100 @@ -1376,13 +1376,20 @@ $ . "$TESTDIR/cgienv" $ PATH_INFO=/bookmarks; export PATH_INFO $ QUERY_STRING='style=raw' - $ python hgweb.cgi + $ python hgweb.cgi | grep -v ETag: + Status: 200 Script output follows\r (esc) + Content-Type: text/plain; charset=ascii\r (esc) + \r (esc) listbookmarks hides secret bookmarks $ PATH_INFO=/; export PATH_INFO $ QUERY_STRING='cmd=listkeys&namespace=bookmarks' $ 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) search works with filtering