gitweb: Add support for FastCGI, using CGI::Fast
Former run() subroutine got renamed to run_request(). The new run()
subroutine can run multiple requests at once if run as FastCGI script.
To run gitweb as FastCGI script you must specify '--fastcgi' / '-f'
command line option to gitweb, otherwise it runs as an ordinary CGI
script.
[jn: cherry picked from 56d7d436644ab296155a697552ea1345f2701620
in http://utsl.gen.nz/gitweb/?p=gitweb which was originally based
on v264 (2326acfa95
) by Kay Sievers;
updated to reflect current gitweb code]
TODO: update 'gitweb/README' and/or 'gitweb/INSTALL' files.
Signed-off-by: Sam Vilain <sam.vilain@catalyst.net.nz>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c2394fe934
commit
a0446e7ba8
@ -999,7 +999,7 @@ sub dispatch {
|
|||||||
$actions{$action}->();
|
$actions{$action}->();
|
||||||
}
|
}
|
||||||
|
|
||||||
sub run {
|
sub run_request {
|
||||||
our $t0 = [Time::HiRes::gettimeofday()]
|
our $t0 = [Time::HiRes::gettimeofday()]
|
||||||
if defined $t0;
|
if defined $t0;
|
||||||
|
|
||||||
@ -1019,11 +1019,61 @@ sub run {
|
|||||||
configure_gitweb_features();
|
configure_gitweb_features();
|
||||||
|
|
||||||
dispatch();
|
dispatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
our $is_last_request = sub { 1 };
|
||||||
|
our ($pre_dispatch_hook, $post_dispatch_hook, $pre_listen_hook);
|
||||||
|
our $CGI = 'CGI';
|
||||||
|
our $cgi;
|
||||||
|
sub evaluate_argv {
|
||||||
|
return unless (@ARGV);
|
||||||
|
|
||||||
|
require Getopt::Long;
|
||||||
|
Getopt::Long::GetOptions(
|
||||||
|
'fastcgi|fcgi|f' => sub {
|
||||||
|
require CGI::Fast;
|
||||||
|
our $CGI = 'CGI::Fast';
|
||||||
|
|
||||||
|
my $request_number = 0;
|
||||||
|
# let each child service 100 requests
|
||||||
|
our $is_last_request = sub { ++$request_number > 100 };
|
||||||
|
},
|
||||||
|
'nproc|n=i' => sub {
|
||||||
|
my ($arg, $val) = @_;
|
||||||
|
return unless eval { require FCGI::ProcManager; 1; };
|
||||||
|
my $proc_manager = FCGI::ProcManager->new({
|
||||||
|
n_processes => $val,
|
||||||
|
});
|
||||||
|
our $pre_listen_hook = sub { $proc_manager->pm_manage() };
|
||||||
|
our $pre_dispatch_hook = sub { $proc_manager->pm_pre_dispatch() };
|
||||||
|
our $post_dispatch_hook = sub { $proc_manager->pm_post_dispatch() };
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub run {
|
||||||
|
evaluate_argv();
|
||||||
|
|
||||||
|
$pre_listen_hook->()
|
||||||
|
if $pre_listen_hook;
|
||||||
|
|
||||||
|
REQUEST:
|
||||||
|
while ($cgi = $CGI->new()) {
|
||||||
|
$pre_dispatch_hook->()
|
||||||
|
if $pre_dispatch_hook;
|
||||||
|
|
||||||
|
run_request();
|
||||||
|
|
||||||
|
$pre_dispatch_hook->()
|
||||||
|
if $post_dispatch_hook;
|
||||||
|
|
||||||
|
last REQUEST if ($is_last_request->());
|
||||||
|
}
|
||||||
|
|
||||||
DONE_GITWEB:
|
DONE_GITWEB:
|
||||||
1;
|
1;
|
||||||
}
|
}
|
||||||
our $cgi = CGI->new();
|
|
||||||
run();
|
run();
|
||||||
|
|
||||||
## ======================================================================
|
## ======================================================================
|
||||||
|
Loading…
Reference in New Issue
Block a user