comparison mercurial/hgweb/hgwebdir_mod.py @ 4079:40c9710e8182

Pass a ui from create_server to hgwebdir and a repo from hgwebdir to hgweb This allows repo pages to respect hg serve --webdir-conf <file> --style=gitweb (part of issue253). Since we're creating a ui object anyway, use it as the parentui of the ui objects created for every repo entry. This has the unintended side-effect that --name=foo on the command line will set the name of all repos. If one of the repos being served has a .hg/hgrc owned by a user that is not trusted, hg will now print the "Not trusting file..." warning when reading it. This is consistent with the behaviour from a hg serve from inside the repo.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Tue, 13 Feb 2007 10:01:44 -0200
parents 9c8488490724
children ef14fdb675da
comparison
equal deleted inserted replaced
4078:ff08cebcd116 4079:40c9710e8182
14 demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile,style_map") 14 demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile,style_map")
15 from mercurial.i18n import gettext as _ 15 from mercurial.i18n import gettext as _
16 16
17 # This is a stopgap 17 # This is a stopgap
18 class hgwebdir(object): 18 class hgwebdir(object):
19 def __init__(self, config): 19 def __init__(self, config, parentui=None):
20 def cleannames(items): 20 def cleannames(items):
21 return [(name.strip(os.sep), path) for name, path in items] 21 return [(name.strip(os.sep), path) for name, path in items]
22 22
23 self.parentui = parentui
23 self.motd = "" 24 self.motd = ""
24 self.style = "" 25 self.style = ""
25 self.repos_sorted = ('name', False) 26 self.repos_sorted = ('name', False)
26 if isinstance(config, (list, tuple)): 27 if isinstance(config, (list, tuple)):
27 self.repos = cleannames(config) 28 self.repos = cleannames(config)
71 yield tmpl("footer", **map) 72 yield tmpl("footer", **map)
72 73
73 def motd(**map): 74 def motd(**map):
74 yield self.motd 75 yield self.motd
75 76
77 parentui = self.parentui or ui.ui(report_untrusted=False)
78
76 url = req.env['REQUEST_URI'].split('?')[0] 79 url = req.env['REQUEST_URI'].split('?')[0]
77 if not url.endswith('/'): 80 if not url.endswith('/'):
78 url += '/' 81 url += '/'
79 82
80 style = self.style 83 style = self.style
109 separator = ';' 112 separator = ';'
110 113
111 rows = [] 114 rows = []
112 parity = 0 115 parity = 0
113 for name, path in self.repos: 116 for name, path in self.repos:
114 u = ui.ui(report_untrusted=False) 117 u = ui.ui(parentui=parentui)
115 try: 118 try:
116 u.readconfig(os.path.join(path, '.hg', 'hgrc')) 119 u.readconfig(os.path.join(path, '.hg', 'hgrc'))
117 except IOError: 120 except IOError:
118 pass 121 pass
119 def get(section, name, default=None): 122 def get(section, name, default=None):
177 break 180 break
178 virtual = virtual[:up] 181 virtual = virtual[:up]
179 if real: 182 if real:
180 req.env['REPO_NAME'] = virtual 183 req.env['REPO_NAME'] = virtual
181 try: 184 try:
182 hgweb(real).run_wsgi(req) 185 repo = hg.repository(parentui, real)
186 hgweb(repo).run_wsgi(req)
183 except IOError, inst: 187 except IOError, inst:
184 req.write(tmpl("error", error=inst.strerror)) 188 req.write(tmpl("error", error=inst.strerror))
185 except hg.RepoError, inst: 189 except hg.RepoError, inst:
186 req.write(tmpl("error", error=str(inst))) 190 req.write(tmpl("error", error=str(inst)))
187 else: 191 else: