diff mercurial/hgweb/hgwebdir_mod.py @ 36873:98baf8dea553

hgweb: port static file handling to new response API hgwebdir_mod hasn't received as much porting effort. So we had to do some minor plumbing to get it to match hgweb_mod and to support the new response object. Differential Revision: https://phab.mercurial-scm.org/D2789
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 10 Mar 2018 15:46:29 -0800
parents 3d60a22e27f5
children 97e1dda94af8
line wrap: on
line diff
--- a/mercurial/hgweb/hgwebdir_mod.py	Sat Mar 10 15:37:29 2018 -0800
+++ b/mercurial/hgweb/hgwebdir_mod.py	Sat Mar 10 15:46:29 2018 -0800
@@ -230,12 +230,14 @@
 
     def _runwsgi(self, wsgireq):
         req = wsgireq.req
+        res = wsgireq.res
 
         try:
             self.refresh()
 
             csp, nonce = cspvalues(self.ui)
             if csp:
+                res.headers['Content-Security-Policy'] = csp
                 wsgireq.headers.append(('Content-Security-Policy', csp))
 
             virtual = wsgireq.env.get("PATH_INFO", "").strip('/')
@@ -243,6 +245,10 @@
             ctype = tmpl('mimetype', encoding=encoding.encoding)
             ctype = templater.stringify(ctype)
 
+            # Global defaults. These can be overridden by any handler.
+            res.status = '200 Script output follows'
+            res.headers['Content-Type'] = ctype
+
             # a static file
             if virtual.startswith('static/') or 'static' in req.qsparams:
                 if virtual.startswith('static/'):
@@ -256,8 +262,9 @@
                     if isinstance(tp, str):
                         tp = [tp]
                     static = [os.path.join(p, 'static') for p in tp]
-                staticfile(static, fname, wsgireq)
-                return []
+
+                staticfile(static, fname, res)
+                return res.sendresponse()
 
             # top-level index