Patchwork D2733: hgweb: always use "?" when writing session vars

login
register
mail settings
Submitter phabricator
Date March 9, 2018, 1:06 a.m.
Message ID <differential-rev-PHID-DREV-dog4dzvs6r4k2vb4wpmm-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/29137/
State Superseded
Headers show

Comments

phabricator - March 9, 2018, 1:06 a.m.
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This code resolves a string to insert in URLs as part of a
  query string. Essentially, it resolves the {sessionvars}
  template keyword, which is used by hgweb templates to build
  a URL as a string.
  
  The whole approach here feels wrong because there's no way of
  knowing when this code runs how the final URL will look. There
  could be additional URL fragments added before this template
  keyword that add a query string component.
  
  Furthermore, I don't think there's *any* for req.url to have
  a query string. That's because the code that populates this
  variable only takes SCRIPT_NAME and REPO_NAME into account. The
  "?" character it is searching for would only be added if some
  code attempted to add QUERY_STRING to the URL. Hacking the code
  up to raise if "?" is present in the URL yields a clean test
  suite run. I'm not sure if we broke this code or if it has
  always been broken.
  
  Anyway, this commit removes support for emitting "&" as the
  first character in {sessionvars} and makes it always emit "?",
  which is what it was always doing before AFAICT.

REPOSITORY
  rHG Mercurial

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

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

CHANGE DETAILS




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

Patch

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
@@ -509,8 +509,7 @@ 
         if style == styles[0]:
             vars['style'] = style
 
-        start = r'&' if url[-1] == r'?' else r'?'
-        sessionvars = webutil.sessionvars(vars, start)
+        sessionvars = webutil.sessionvars(vars, r'?')
         logourl = config('web', 'logourl')
         logoimg = config('web', 'logoimg')
         staticurl = config('web', 'staticurl') or url + 'static/'
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
@@ -177,8 +177,7 @@ 
         if style == styles[0]:
             vars['style'] = style
 
-        start = '&' if wsgireq.url[-1] == r'?' else '?'
-        sessionvars = webutil.sessionvars(vars, start)
+        sessionvars = webutil.sessionvars(vars, '?')
 
         if not self.reponame:
             self.reponame = (self.config('web', 'name', '')