D2770: hgweb: make parsedrequest part of wsgirequest

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Mon Mar 12 17:32:34 EDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rHG1f7d9024674c: hgweb: make parsedrequest part of wsgirequest (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

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

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

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.



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


More information about the Mercurial-devel mailing list