Documentation/public-inbox-config.pod | 9 +++++++++ lib/PublicInbox/Cgit.pm | 16 +++++++++++++--- diff --git a/Documentation/public-inbox-config.pod b/Documentation/public-inbox-config.pod index f894eb3d7ff7d148fe275e86dd6027c6e7bc69aa..291502205e0618c974d2e04732a92d7b05fe27f0 100644 --- a/Documentation/public-inbox-config.pod +++ b/Documentation/public-inbox-config.pod @@ -217,6 +217,15 @@ directive is configured. Default: /var/www/htdocs/cgit/cgit.cgi or /usr/lib/cgit/cgit.cgi +=item publicinbox.cgitdata + +A path to the data directory used by cgit for storing static files. +Typically guessed based the location of C (from +C, but may be overridden. + +Default: basename of C, /var/www/htdocs/cgit/ +or /usr/share/cgit/ + =back =head2 NAMED LIMITER (PSGI) diff --git a/lib/PublicInbox/Cgit.pm b/lib/PublicInbox/Cgit.pm index 8922ec567c902d0cf4c3a5907cc6551021990aad..353f41627b983d1426cdf6680a4b4e0b400ad6c2 100644 --- a/lib/PublicInbox/Cgit.pm +++ b/lib/PublicInbox/Cgit.pm @@ -35,7 +35,15 @@ last; } } unless (defined $cgit_data) { - foreach my $d (qw(/var/www/htdocs/cgit /usr/share/cgit)) { + my @dirs = qw(/var/www/htdocs/cgit /usr/share/cgit); + + # local installs of cgit from source have + # CGIT_SCRIPT_PATH==CGIT_DATA_PATH by default, + # so we can usually infer the cgit_data path from cgit_bin + if (defined($cgit_bin) && $cgit_bin =~ m!\A(.+?)/[^/]+\z!) { + unshift @dirs, $1 if -d $1; + } + foreach my $d (@dirs) { my $f = "$d/cgit.css"; next unless -f $f; $cgit_data = $d; @@ -90,6 +98,7 @@ sub call { my ($self, $env) = @_; my $path_info = $env->{PATH_INFO}; + my $cgit_data; # handle requests without spawning cgit iff possible: if ($path_info =~ m!\A/(.+?)/($PublicInbox::GitHTTPBackend::ANY)\z!ox) { @@ -97,10 +106,11 @@ my ($nick, $path) = ($1, $2); if (my $git = $self->{"\0$nick"}) { return serve($env, $git, $path); } - } elsif ($path_info =~ m!$self->{static}!) { + } elsif ($path_info =~ m!$self->{static}! && + defined($cgit_data = $self->{cgit_data})) { my $f = $1; my $type = Plack::MIME->mime_type($f); - return static_result($env, [], "$self->{cgit_data}$f", $type); + return static_result($env, [], $cgit_data.$f, $type); } my $cgi_env = { PATH_INFO => $path_info };