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.
--- a/mercurial/hgweb/hgwebdir_mod.py Tue Feb 13 10:00:17 2007 -0200
+++ b/mercurial/hgweb/hgwebdir_mod.py Tue Feb 13 10:01:44 2007 -0200
@@ -16,10 +16,11 @@
# This is a stopgap
class hgwebdir(object):
- def __init__(self, config):
+ def __init__(self, config, parentui=None):
def cleannames(items):
return [(name.strip(os.sep), path) for name, path in items]
+ self.parentui = parentui
self.motd = ""
self.style = ""
self.repos_sorted = ('name', False)
@@ -73,6 +74,8 @@
def motd(**map):
yield self.motd
+ parentui = self.parentui or ui.ui(report_untrusted=False)
+
url = req.env['REQUEST_URI'].split('?')[0]
if not url.endswith('/'):
url += '/'
@@ -111,7 +114,7 @@
rows = []
parity = 0
for name, path in self.repos:
- u = ui.ui(report_untrusted=False)
+ u = ui.ui(parentui=parentui)
try:
u.readconfig(os.path.join(path, '.hg', 'hgrc'))
except IOError:
@@ -179,7 +182,8 @@
if real:
req.env['REPO_NAME'] = virtual
try:
- hgweb(real).run_wsgi(req)
+ repo = hg.repository(parentui, real)
+ hgweb(repo).run_wsgi(req)
except IOError, inst:
req.write(tmpl("error", error=inst.strerror))
except hg.RepoError, inst:
--- a/mercurial/hgweb/server.py Tue Feb 13 10:00:17 2007 -0200
+++ b/mercurial/hgweb/server.py Tue Feb 13 10:01:44 2007 -0200
@@ -220,7 +220,7 @@
def make_handler(self):
if self.webdir_conf:
- hgwebobj = self.webdirmaker(self.webdir_conf)
+ hgwebobj = self.webdirmaker(self.webdir_conf, ui)
elif self.repo is not None:
hgwebobj = self.repoviewmaker(repo.__class__(repo.ui,
repo.origroot))