diff mercurial/hgweb/hgweb_mod.py @ 36869:7ad6a275316f

hgweb: inline caching() and port to modern mechanisms We only had one consumer of this simple function. While it could be a generic function, let's not over abstract the code. As part of inlining, we port it off wsgirequest, fix some Python 3 issues, and set a response header on our new response object so it is ready once we start using it to send responses. Differential Revision: https://phab.mercurial-scm.org/D2785
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 10 Mar 2018 14:19:27 -0800
parents 8ddb5c354906
children 1f42d621f090
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py	Sat Mar 10 14:06:58 2018 -0800
+++ b/mercurial/hgweb/hgweb_mod.py	Sat Mar 10 14:19:27 2018 -0800
@@ -18,7 +18,6 @@
     HTTP_NOT_MODIFIED,
     HTTP_OK,
     HTTP_SERVER_ERROR,
-    caching,
     cspvalues,
     permhooks,
 )
@@ -388,7 +387,13 @@
             # Don't enable caching if using a CSP nonce because then it wouldn't
             # be a nonce.
             if rctx.configbool('web', 'cache') and not rctx.nonce:
-                caching(self, wsgireq) # sets ETag header or raises NOT_MODIFIED
+                tag = 'W/"%d"' % self.mtime
+                if req.headers.get('If-None-Match') == tag:
+                    raise ErrorResponse(HTTP_NOT_MODIFIED)
+
+                wsgireq.headers.append((r'ETag', pycompat.sysstr(tag)))
+                res.headers['ETag'] = tag
+
             if cmd not in webcommands.__all__:
                 msg = 'no such method: %s' % cmd
                 raise ErrorResponse(HTTP_BAD_REQUEST, msg)