From 6a995f2c172e4497df6683d978c7823647dcb2ed Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Sun, 18 Feb 2018 16:39:43 -0500 Subject: initial psgi support --- Bugzilla/CGI.pm | 4 +++- Bugzilla/Constants.pm | 4 ++++ Bugzilla/PSGI.pm | 36 ++++++++++++++++++++++++++++++++++++ Bugzilla/Template.pm | 4 ++-- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 Bugzilla/PSGI.pm (limited to 'Bugzilla') diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index 3737b97e2..05e2bd749 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -113,7 +113,7 @@ sub new { # Under mod_perl, CGI's global variables get reset on each request, # so we need to set them up again every time. - $class->_init_bz_cgi_globals() if $ENV{MOD_PERL}; + $class->_init_bz_cgi_globals() if BZ_PERSISTENT; my $self = $class->SUPER::new(@args); @@ -597,6 +597,8 @@ sub header { sub param { my $self = shift; + local $CGI::LIST_CONTEXT_WARN = 0; + # When we are just requesting the value of a parameter... if (scalar(@_) == 1) { my @result = $self->SUPER::param(@_); diff --git a/Bugzilla/Constants.pm b/Bugzilla/Constants.pm index 00f0f8104..2971c7a53 100644 --- a/Bugzilla/Constants.pm +++ b/Bugzilla/Constants.pm @@ -194,6 +194,8 @@ use Memoize; EMAIL_LIMIT_EXCEPTION JOB_QUEUE_VIEW_MAX_JOBS + + BZ_PERSISTENT ); @Bugzilla::Constants::EXPORT_OK = qw(contenttypes); @@ -705,6 +707,8 @@ sub _bz_locations { }; } +use constant BZ_PERSISTENT => $main::BUGZILLA_PERSISTENT; + # This makes us not re-compute all the bz_locations data every time it's # called. BEGIN { memoize('_bz_locations') }; diff --git a/Bugzilla/PSGI.pm b/Bugzilla/PSGI.pm new file mode 100644 index 000000000..22e08540d --- /dev/null +++ b/Bugzilla/PSGI.pm @@ -0,0 +1,36 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::PSGI; +use 5.10.1; +use strict; +use warnings; + +use base qw(Exporter); + +our @EXPORT_OK = qw(compile_cgi); + +sub compile_cgi { + my ($script) = @_; + my $app = Plack::App::WrapCGI->new( script => $script )->to_app; + + return sub { + my ($env) = @_; + Bugzilla::init_page(); + if ($env->{'psgix.cleanup'}) { + push @{ $env->{'psgix.cleanup.handler'} }, \&Bugzilla::_cleanup; + } + + my $res = $app->($env); + Bugzilla::_cleanup() if not $env->{'psgix.cleanup'}; + return $res; + }; +} + + + +1; \ No newline at end of file diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm index d27896532..0d2a4cd86 100644 --- a/Bugzilla/Template.pm +++ b/Bugzilla/Template.pm @@ -570,7 +570,7 @@ sub create { # if a packager has modified bz_locations() to contain absolute # paths. ABSOLUTE => 1, - RELATIVE => $ENV{MOD_PERL} ? 0 : 1, + RELATIVE => 0, COMPILE_DIR => bz_locations()->{'template_cache'}, @@ -1037,7 +1037,7 @@ sub create { # under mod_perl, use a provider (template loader) that preloads all templates into memory my $provider_class - = $ENV{MOD_PERL} + = BZ_PERSISTENT ? 'Bugzilla::Template::PreloadProvider' : 'Template::Provider'; -- cgit v1.2.3-24-g4f1b