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,7 +170,7 @@ 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) @@ -178,7 +178,7 @@ # 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, @@ -187,7 +187,7 @@ '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'/') 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('/')