{"thread":{"id":"43727","subject":"[PATCH] gitweb: Sprinkle some mod_perl goodies","startedAt":"2006-12-12T16:55:59Z","lastAt":"2006-12-12T16:55:59Z","messageCount":1,"participants":["Jakub Narebski"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"297408","messageId":"1165942559879-git-send-email-jnareb@gmail.com","threadId":"43727","inReplyTo":null,"subject":"[PATCH] gitweb: Sprinkle some mod_perl goodies","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2006-12-12T16:55:59Z","receivedAt":"2006-12-12T16:55:59Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Add $r variable which holds Apache::RequestRec if script is run under\nmod_perl (if $ENV{MOD_PERL} is defined). It is used as argument to\nconstructor of CGI object (needs CGI module version at least 2.93).\n\nFollowing advice from CGI(3pm) man page, precompile all CGI routines\nfor mod_perl.\n\nUse $r->path_info() instead of $ENV{\"PATH_INFO\"}.\n\nAll this makes gitweb slightly faster under mod_perl.\n\nSigned-off-by: Jakub Narebski <jnareb@gmail.com>\n---\n gitweb/gitweb.perl |   11 +++++++++--\n 1 files changed, 9 insertions(+), 2 deletions(-)\n\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex 040ee71..ebe59b8 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -18,11 +18,18 @@ use File::Find qw();\n use File::Basename qw(basename);\n binmode STDOUT, ':utf8';\n \n-our $cgi = new CGI;\n+# mod_perl request\n+my $r;\n+$r = shift @_ if $ENV{MOD_PERL};\n+\n+our $cgi = new CGI($r);\n our $version = \"++GIT_VERSION++\";\n our $my_url = $cgi->url();\n our $my_uri = $cgi->url(-absolute => 1);\n \n+# speeding up mod_perl and FastCGI (later)\n+$cgi->compile() if $r;\n+\n # core git executable to use\n # this can just be \"git\" if your webserver has a sensible PATH\n our $GIT = \"++GIT_BINDIR++/git\";\n@@ -364,7 +371,7 @@ if (defined $searchtype) {\n # now read PATH_INFO and use it as alternative to parameters\n sub evaluate_path_info {\n \treturn if defined $project;\n-\tmy $path_info = $ENV{\"PATH_INFO\"};\n+\tmy $path_info = $r ? $r->path_info() : $ENV{\"PATH_INFO\"};\n \treturn if !$path_info;\n \t$path_info =~ s,^/+,,;\n \treturn if !$path_info;\n-- \n1.4.4.1\n"}]}