Re: Static gitweb content when using pathinfo
- From
Jakub Narebski <jnareb@gmail.com>
- Date
- Apr 17, 2012, 12:30 UTC
- Message-ID
- <201204171430.52650.jnareb@gmail.com>
- In-Reply-To
- <4F8C384C.2040109@gmail.com>
On Mon, 16 Apr 2012, José María Escartín Esteban wrote:
> On 14/04/12 19:19, Jakub Narebski wrote: >> On Thu, 5 Apr 2012, Jakub Narebski wrote: >>> On Thu, 5 Apr 2012, José María Escartín Esteban wrote:
Show 14 quoted lines
>>> There might be problem if you configured your web server to serve gitweb >>> using it as a handler for subdirectory, so the script name does not need >>> to appear in URL, e.g. >>> >>> http://localhost/cgi-bin/gitweb >>> >>> which would require the following base element >>> >>> <base href="http://localhost/cgi-bin/gitweb/" /> >> >> [...] >> > > Yes, that was precisely the problem.
Note that you won't have problem with `http://localhost` as base url (without any directory), or in more realistic case using virtual host rather than virtual directory. The problem is that without '/' the path part of $base_url is stripped of last element.
Just for completeness.
[...]
> This addition to the man page would of course have been useful, since it took me > a while to detect that the problem was a missing slash in the base url. > However, it would not have solved completely my problem, and for me the best has > been to add the line of code you proposed in the previous email.
So how about the proposed updated addition at the end of this email?
Show 23 quoted lines
> I am running a Debian testing (wheezy) server, so the distro gitweb files are: > > /etc/apache2/conf.d/gitweb > /etc/gitweb.conf > /usr/share/gitweb/gitweb.cgi > /usr/share/gitweb/index.cgi -> /usr/share/gitweb/gitweb.cgi > /usr/share/gitweb/static/* > > I am using two sets of git repositories, and each of the sets works through a > particular gitolite user: > > user home > ---------------------- > git /srv/project > mygit /srv/mygit > > I wanted that different groups of people were able to browse the 'project' repos > (in fact it is a mirror from the main project server) from > http://server.example.com/project/ , > and the 'mygit' repos from > http://server.example.com/mygit/ . > And I wanted to keep urls as short and easy as possible, and to avoid > proliferation of configs as much as possible.
I think that is this "two sets" that created configuration with a problem.
Show 11 quoted lines
> The setup I came up with was to link > > /srv/www/project -> /usr/share/gitweb > /srv/www/mygit -> /usr/share/gitweb > > and to use the following configuration files: > > ######### /etc/apache2/conf.d/gitweb ################## > <Directory /srv/www/project> > SetEnv GITWEB_PROJECTROOT /srv/git/ > SetEnv GITWEB_CONFIG /etc/gitweb.conf
[...]
Show 11 quoted lines
> #######################################################
>
> ######### /etc/gitweb.conf ############################
> $projectroot = $ENV{'GITWEB_PROJECTROOT'}."repositories";
> $git_temp = "/tmp";
> $projects_list = $ENV{'GITWEB_PROJECTROOT'}."projects.list";
> @diff_opts = ();
> $feature{'pathinfo'}{'default'} = [1];
> $feature{'highlight'}{'default'} = [1];
> $projects_list_description_width = 50;
> #######################################################A question: why not have
SetEnv GITWEB_PROJECTROOT /srv/git
and use
$projectroot = "$ENV{'GITWEB_PROJECTROOT'}/repositories";
$projects_list = "$ENV{'GITWEB_PROJECTROOT'}/projects.list";
BTW. what is this $git_temp? Is it modified gitweb, because core one doesn't need to use temporary directory for anything nowadays?
A tip: you can use GITWEB_CONFIG_COMMON for the common part of configuration and separate GITWEB_CONFIG for per-instance configuration. Though I am not sure if it would help in your case. It requires modern gitweb. though.
Show 6 quoted lines
> Probably there are better ways to implement this, but at least this seems to > work, once I have added > > $base_url .= '/' unless ($base_url =~ m!/$!); > > to /etc/gitweb.conf .
-- >8 ---------- >8 -- Subject: [PATCH] gitweb.conf(5): When to set $base_url
Add a paragraph to description of $base_url variable in gitweb.conf(5) manpage explaining when and why one might need to set it, and how.
Based-on-report-by: José María Escartín Esteban <ripero84@gmail.com> Signed-off-by: Jakub Narębski <jnareb@gmail.com> --- Documentation/gitweb.conf.txt | 24 ++++++++++++++++++++++++ Documentation/gitweb.txt | 4 ++++ 2 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt index 7aba497..4716a0f 100644 --- a/Documentation/gitweb.conf.txt +++ b/Documentation/gitweb.conf.txt @@ -559,6 +559,30 @@ $base_url:: PATH_INFO. Usually gitweb sets its value correctly, and there is no need to set this variable, e.g. to $my_uri or "/". See `$per_request_config` if you need to override it anyway. ++ +You would need to set this variable when using path_info-based URLs +while using gitweb as a directory handler (which means that full path +to browse repositories looks like `http://git.example.com/gitweb` +rather than looking like `http://git.example.com/gitweb/gitweb.cgi`). +You can find yourself in this situation (gitweb as directory handler) +when configuring gitweb to use FastCGI interface as shown in +"Webserver configuration" section on linkgit:gitweb[1] manpage. ++ +If static files are served from 'static' subdirectory of directory +the gitweb script is handler for, with default URLs of static files +(e.g. `$logo` is `static/git-logo.png`), then you would need to ensure +that `$base_url` ends with slash to denote that it is directory, to +work correctly: ++ +---------------------------------------------------------------------- +$base_url .= '/' unless ($base_url =~ m!/$!); +---------------------------------------------------------------------- ++ +For example if gitweb URL is `http://git.example.com/gitweb`, and +static files are available in `http://git.example.com/gitweb/static/` +then `$base_url` must end up to be `http://git.example.com/gitweb/` +(with trailing slash) for e.g. `static/git-logo.png` relative link +to refer to `http://git.example.com/gitweb/static/git-logo.png`. CONFIGURING GITWEB FEATURES diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt index b394ecc..c3db66a 100644 --- a/Documentation/gitweb.txt +++ b/Documentation/gitweb.txt @@ -473,6 +473,10 @@ With that configuration the full path to browse repositories would be: http://server/gitweb +Note that for this configuration `$base_url` must be set as described +in linkgit:gitweb.conf[5] for gitweb to correctly serve static files +with path_info links. + As PSGI using plackup ~~~~~~~~~~~~~~~~~~~~~ Gitweb can run as PSGI app (via emulation with *CGI::Emulate::PSGI*(3pm)).
-- 1.7.9