D2785: hgweb: inline caching() and port to modern mechanisms
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sun Mar 11 05:24:14 UTC 2018
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D2785
AFFECTED FILES
mercurial/hgweb/common.py
mercurial/hgweb/hgweb_mod.py
CHANGE DETAILS
diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -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)
diff --git a/mercurial/hgweb/common.py b/mercurial/hgweb/common.py
--- a/mercurial/hgweb/common.py
+++ b/mercurial/hgweb/common.py
@@ -214,12 +214,6 @@
config("ui", "username") or
encoding.environ.get("EMAIL") or "")
-def caching(web, req):
- tag = r'W/"%d"' % web.mtime
- if req.env.get('HTTP_IF_NONE_MATCH') == tag:
- raise ErrorResponse(HTTP_NOT_MODIFIED)
- req.headers.append(('ETag', tag))
-
def cspvalues(ui):
"""Obtain the Content-Security-Policy header and nonce value.
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list