[RFC/PATCH (take 3)] gitweb: Add some mod_perl specific support
- From
Jakub Narebski <jnareb@gmail.com>
- Date
- Dec 16, 2006, 16:12 UTC
- Message-ID
- <11662855752162-git-send-email-jnareb@gmail.com>
- In-Reply-To
- <11662174851575-git-send-email-jnareb@gmail.com>
Add $r variable which holds Apache2::RequestRec if script is run under mod_perl (if $ENV{MOD_PERL} is defined). It is used as argument to constructor of CGI object (needs CGI module version at least 2.93). It is needed for further mod_perl support, for example adding headers using Apache2::RequestRec methods instead of making Apache to have to parse headers (to add it's own HTTP headers like Server: header).
Following advice from CGI(3pm) man page, precompile all CGI routines for mod_perl.
All this makes gitweb slightly faster under mod_perl (436 +/- 23.9 ms for summary of git.git before, 429 +/- 12.0 ms after, according to 'ab -n 10 -k "http://localhost/perl/gitweb/gitweb.cgi?p=git.git"').
Signed-off-by: Jakub Narebski <jnareb@gmail.com> --- The idea is to have gitweb run under CGI and under mod_perl 1.0 and 2.0 without modifications, but making use of mod_perl features which make script faster, like for example adding headers via mod_perl API and not via parsing headers by Apache. In the future the plan is to be able to run gitweb under not only current ModPerl::Registry (or Apache::Registry in mod_perl 1.0) but also as a mod_perl handler, and as a FastCGI script using CGI::Fast.
Current portion of mod_perl cpecific additions is mod_perl version agnostic, and avoids loading any mod_perl Perl modules.
I'd like to have it (and further mod_perl patches) reviewed by someone better versed in mod_perl.
gitweb/gitweb.perl | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 902c514..f834c64 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -18,11 +18,18 @@ use File::Find qw(); use File::Basename qw(basename); binmode STDOUT, ':utf8'; -our $cgi = new CGI; +# mod_perl request +my $r; +$r = shift @_ if $ENV{MOD_PERL}; + +our $cgi = new CGI($r); our $version = "++GIT_VERSION++"; our $my_url = $cgi->url(); our $my_uri = $cgi->url(-absolute => 1); +# speeding up mod_perl and FastCGI (later) +$cgi->compile() if $r; + # core git executable to use # this can just be "git" if your webserver has a sensible PATH our $GIT = "++GIT_BINDIR++/git";
-- 1.4.4.1