D2736: hgweb: use the parsed application path directly

2018-03-09 Thread indygreg (Gregory Szorc)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG328d665ef23d: hgweb: use the parsed application path 
directly (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2736?vs=6742=6781

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

AFFECTED FILES
  mercurial/hgweb/hgweb_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
@@ -146,14 +146,13 @@
 # root. We also exclude its path components from PATH_INFO when resolving
 # the dispatch path.
 
-# TODO the use of trailing slashes in apppath is arguably wrong. We need it
-# to appease low-level parts of hgweb_mod for now.
 apppath = env['SCRIPT_NAME']
-if not apppath.endswith('/'):
-apppath += '/'
 
 if env.get('REPO_NAME'):
-apppath += env.get('REPO_NAME') + '/'
+if not apppath.endswith('/'):
+apppath += '/'
+
+apppath += env.get('REPO_NAME')
 
 if 'PATH_INFO' in env:
 dispatchparts = env['PATH_INFO'].strip('/').split('/')
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
@@ -148,7 +148,7 @@
 logourl = self.config('web', 'logourl')
 logoimg = self.config('web', 'logoimg')
 staticurl = (self.config('web', 'staticurl')
- or pycompat.sysbytes(wsgireq.url) + 'static/')
+ or req.apppath + '/static/')
 if not staticurl.endswith('/'):
 staticurl += '/'
 
@@ -170,24 +170,24 @@
 if not self.reponame:
 self.reponame = (self.config('web', 'name', '')
  or wsgireq.env.get('REPO_NAME')
- or wsgireq.url.strip(r'/') or self.repo.root)
+ or req.apppath or self.repo.root)
 
 def websubfilter(text):
 return templatefilters.websub(text, self.websubtable)
 
 # create the templater
 # TODO: export all keywords: defaults = templatekw.keywords.copy()
 defaults = {
-'url': pycompat.sysbytes(wsgireq.url),
+'url': req.apppath + '/',
 'logourl': logourl,
 'logoimg': logoimg,
 'staticurl': staticurl,
 'urlbase': req.advertisedbaseurl,
 'repo': self.reponame,
 'encoding': encoding.encoding,
 'motd': motd,
 'sessionvars': sessionvars,
-'pathdef': makebreadcrumb(pycompat.sysbytes(wsgireq.url)),
+'pathdef': makebreadcrumb(req.apppath),
 'style': style,
 'nonce': self.nonce,
 }
@@ -318,8 +318,6 @@
if h[0] != 'Content-Security-Policy']
 wsgireq.headers.append(('Content-Security-Policy', rctx.csp))
 
-wsgireq.url = pycompat.sysstr(req.apppath)
-
 if r'PATH_INFO' in wsgireq.env:
 parts = wsgireq.env[r'PATH_INFO'].strip(r'/').split(r'/')
 repo_parts = wsgireq.env.get(r'REPO_NAME', r'').split(r'/')



To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


D2736: hgweb: use the parsed application path directly

2018-03-08 Thread indygreg (Gregory Szorc)
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Previously, we assigned a custom system string with a trailing slash
  to wsgirequest.url.
  
  The addition of the trailing slash felt arbitrary and seems to go
  against how things typically work in WSGI.
  
  We also want our URLs to be bytes, not system strings.
  
  And, assigning a custom attribute to wsgirequest felt wrong.
  
  This commit fixes all those things by removing the trailing
  slash from the app path, changing consumers to use that variable
  and to use it without a trailing slash, and removing the custom
  attribute from wsgirequest.
  
  We preserve the trailing slash on {url}. Also, makebreadcrumb
  strips the trailing slash. So no change to it was needed.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/hgweb/hgweb_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
@@ -146,14 +146,13 @@
 # root. We also exclude its path components from PATH_INFO when resolving
 # the dispatch path.
 
-# TODO the use of trailing slashes in apppath is arguably wrong. We need it
-# to appease low-level parts of hgweb_mod for now.
 apppath = env['SCRIPT_NAME']
-if not apppath.endswith('/'):
-apppath += '/'
 
 if env.get('REPO_NAME'):
-apppath += env.get('REPO_NAME') + '/'
+if not apppath.endswith('/'):
+apppath += '/'
+
+apppath += env.get('REPO_NAME')
 
 if 'PATH_INFO' in env:
 dispatchparts = env['PATH_INFO'].strip('/').split('/')
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
@@ -148,7 +148,7 @@
 logourl = self.config('web', 'logourl')
 logoimg = self.config('web', 'logoimg')
 staticurl = (self.config('web', 'staticurl')
- or pycompat.sysbytes(wsgireq.url) + 'static/')
+ or req.apppath + '/static/')
 if not staticurl.endswith('/'):
 staticurl += '/'
 
@@ -170,24 +170,24 @@
 if not self.reponame:
 self.reponame = (self.config('web', 'name', '')
  or wsgireq.env.get('REPO_NAME')
- or wsgireq.url.strip(r'/') or self.repo.root)
+ or req.apppath or self.repo.root)
 
 def websubfilter(text):
 return templatefilters.websub(text, self.websubtable)
 
 # create the templater
 # TODO: export all keywords: defaults = templatekw.keywords.copy()
 defaults = {
-'url': pycompat.sysbytes(wsgireq.url),
+'url': req.apppath + '/',
 'logourl': logourl,
 'logoimg': logoimg,
 'staticurl': staticurl,
 'urlbase': req.advertisedbaseurl,
 'repo': self.reponame,
 'encoding': encoding.encoding,
 'motd': motd,
 'sessionvars': sessionvars,
-'pathdef': makebreadcrumb(pycompat.sysbytes(wsgireq.url)),
+'pathdef': makebreadcrumb(req.apppath),
 'style': style,
 'nonce': self.nonce,
 }
@@ -318,8 +318,6 @@
if h[0] != 'Content-Security-Policy']
 wsgireq.headers.append(('Content-Security-Policy', rctx.csp))
 
-wsgireq.url = pycompat.sysstr(req.apppath)
-
 if r'PATH_INFO' in wsgireq.env:
 parts = wsgireq.env[r'PATH_INFO'].strip(r'/').split(r'/')
 repo_parts = wsgireq.env.get(r'REPO_NAME', r'').split(r'/')



To: indygreg, #hg-reviewers
Cc: mercurial-devel
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel