comparison mercurial/hgweb/hgwebdir_mod.py @ 15003:a31b8e03af28

hgweb: extract the path logic from updatereqenv and add doctests
author Matt Mackall <mpm@selenic.com>
date Mon, 01 Aug 2011 14:53:10 -0500
parents b55c1c6a793e
children 287f76b3f502
comparison
equal deleted inserted replaced
15002:b55c1c6a793e 15003:a31b8e03af28
49 for path in paths: 49 for path in paths:
50 path = os.path.normpath(path) 50 path = os.path.normpath(path)
51 yield (prefix + '/' + 51 yield (prefix + '/' +
52 util.pconvert(path[len(roothead):]).lstrip('/')).strip('/'), path 52 util.pconvert(path[len(roothead):]).lstrip('/')).strip('/'), path
53 53
54 def geturlcgivars(baseurl, port):
55 """
56 Extract CGI variables from baseurl
57
58 >>> geturlcgivars("http://host.org/base", "80")
59 ('host.org', '80', '/base')
60 >>> geturlcgivars("http://host.org:8000/base", "80")
61 ('host.org', '8000', '/base')
62 >>> geturlcgivars('/base', 8000)
63 ('', '8000', '/base')
64 >>> geturlcgivars("base", '8000')
65 ('', '8000', '/base')
66 >>> geturlcgivars("http://host", '8000')
67 ('host', '8000', '/')
68 >>> geturlcgivars("http://host/", '8000')
69 ('host', '8000', '/')
70 """
71 u = util.url(baseurl)
72 name = u.host or ''
73 if u.port:
74 port = u.port
75 path = u.path or ""
76 if not path.startswith('/'):
77 path = '/' + path
78
79 return name, str(port), path
80
54 class hgwebdir(object): 81 class hgwebdir(object):
55 refreshinterval = 20 82 refreshinterval = 20
56 83
57 def __init__(self, conf, baseui=None): 84 def __init__(self, conf, baseui=None):
58 self.conf = conf 85 self.conf = conf
364 "sessionvars": sessionvars}) 391 "sessionvars": sessionvars})
365 return tmpl 392 return tmpl
366 393
367 def updatereqenv(self, env): 394 def updatereqenv(self, env):
368 if self._baseurl is not None: 395 if self._baseurl is not None:
369 u = util.url(self._baseurl) 396 name, port, path = geturlcgivars(self._baseurl, env['SERVER_PORT'])
370 env['SERVER_NAME'] = u.host 397 env['SERVER_NAME'] = name
371 if u.port: 398 env['SERVER_PORT'] = port
372 env['SERVER_PORT'] = u.port
373 path = u.path or ""
374 if not path.startswith('/'):
375 path = '/' + path
376 env['SCRIPT_NAME'] = path 399 env['SCRIPT_NAME'] = path