Patchwork D2770: hgweb: make parsedrequest part of wsgirequest

login
register
mail settings
Submitter phabricator
Date March 10, 2018, 8:03 p.m.
Message ID <abac95c8d551f24f0786b5da1611b21f@localhost.localdomain>
Download mbox | patch
Permalink /patch/29264/
State Not Applicable
Headers show

Comments

phabricator - March 10, 2018, 8:03 p.m.
indygreg updated this revision to Diff 6832.
indygreg edited the summary of this revision.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2770?vs=6814&id=6832

REVISION DETAIL
  https://phab.mercurial-scm.org/D2770

AFFECTED FILES
  mercurial/hgweb/hgweb_mod.py
  mercurial/hgweb/hgwebdir_mod.py
  mercurial/hgweb/request.py

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/hgweb/request.py b/mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py
+++ b/mercurial/hgweb/request.py
@@ -254,6 +254,8 @@ 
         self.server_write = None
         self.headers = []
 
+        self.req = parserequestfromenv(wsgienv)
+
     def respond(self, status, type, filename=None, body=None):
         if not isinstance(type, str):
             type = pycompat.sysstr(type)
diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py
--- a/mercurial/hgweb/hgwebdir_mod.py
+++ b/mercurial/hgweb/hgwebdir_mod.py
@@ -287,6 +287,11 @@ 
                 real = repos.get(virtualrepo)
                 if real:
                     wsgireq.env['REPO_NAME'] = virtualrepo
+                    # We have to re-parse because of updated environment
+                    # variable.
+                    # TODO this is kind of hacky and we should have a better
+                    # way of doing this than with REPO_NAME side-effects.
+                    wsgireq.req = requestmod.parserequestfromenv(wsgireq.env)
                     try:
                         # ensure caller gets private copy of ui
                         repo = hg.repository(self.ui.copy(), real)
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
@@ -304,7 +304,7 @@ 
                     yield r
 
     def _runwsgi(self, wsgireq, repo):
-        req = requestmod.parserequestfromenv(wsgireq.env)
+        req = wsgireq.req
         rctx = requestcontext(self, repo)
 
         # This state is global across all threads.