Add urlhost option

Nikolaus.Schueler at lantiq.com Nikolaus.Schueler at lantiq.com
Tue Jan 3 06:52:03 CST 2012


Hi Mads,

> > This patch is useful if you want your links to point to a
> different
> > server than the one the repo is hosted on. In our setup, the
> repos are
> > hosted on backend servers, while access to them is through a
> frontend
> > server, so the links for RSS and Atom were wrong, they pointed to
> the
> > backend server instead of the frontend. The reason for this is
> that the
> > URLs were composed from the SERVERNAME which always contains the
> name of
> > the server on which the repo is hosted.
> >
> > We introduced an additional config setting, urlhost, that allows
> you to
> > specify the server to which the links should point.
> ...
> > --- a/mercurial/help/config.txt
> > +++ b/mercurial/help/config.txt
> > @@ -1291,3 +1291,7 @@ The full set of options is:
> >
> >   ``templates``
> >       Where to find the HTML templates. Default is install path.
> > +
> > +``urlhost``
> > +   Name of the host that is used in ``urlbase``. If not
> specified, it defaults
> > +   to ``SERVER_NAME``.
> > 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
> > @@ -233,7 +233,11 @@ class hgweb(object):
> >
> >           port = req.env["SERVER_PORT"]
> >           port = port != default_port and (":" + port) or ""
> > -        urlbase = '%s://%s%s' % (proto, req.env['SERVER_NAME'],
> port)
> > +        urlhost = self.config('web', 'urlhost')
> > +        if urlhost is None:
> > +            urlhost = req.env['SERVER_NAME']
> > +
> > +        urlbase = '%s://%s%s' % (proto, urlhost, port)
> 
> Looking at the code it seems like it would be better to make
> urlbase
> configurable. That would also solve the issue when the frontend
> uses a
> different protocol and port than the backend.
> 
> But according to the documentation we already have a baseurl
> configuration option that should cover your need as well. It is
> tested
> in tests/test-hgwebdir.t. It seems like the real issue here is that
> this
> option only is used for serving multiple repositories, not for
> simple
> serving of a single repository. I think it would be better to solve
> that
> instead.
> 
> /Mads

I tried it out, using baseurl in that way does not work. Extending baseurl to templating in hgweb_mod breaks current behavior. When you set baseurl to get the desired behavior for the hgweb_mod case, you also break URLs in hgwebdir_mod. So we would indeed need an option that only affects templating for hgweb_mod, as in my patch. 

Maybe we could try to find a better name for that option, one that clearly describes that it is meant to change behavior only for the hgweb_mod case?

Regards 

Nik



More information about the Mercurial-devel mailing list