From 2a33402ef9b79641092528bdc78bb01ff5877ae9 Mon Sep 17 00:00:00 2001 From: vfilippov Date: Tue, 1 Jun 2010 18:15:50 +0000 Subject: [PATCH] =?UTF-8?q?Bug=2040933,=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=D0=B5=D0=B1-=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@772 6955db30-a419-402b-8a0d-67ecbb4d7f56 --- Bugzilla.pm | 17 +------------- Bugzilla/Error.pm | 23 ++++++++++++------- Bugzilla/Search.pm | 19 ++++++++++----- Bugzilla/WebService/Bugzilla.pm | 9 +------- contrib/cookies.txt | 1 - jsonrpc.cgi | 3 +++ qa/t/lib/QA/RPC.pm | 2 +- qa/t/webservice_bugzilla.t | 4 ++-- .../custom/global/user-error-page.html.tmpl | 1 + 9 files changed, 37 insertions(+), 42 deletions(-) delete mode 100644 contrib/cookies.txt diff --git a/Bugzilla.pm b/Bugzilla.pm index b5cbd6764..66ce4f825 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -277,22 +277,7 @@ sub template_inner { our $extension_packages; sub extensions { my ($class) = @_; - my $cache = $class->request_cache; - if (!$cache->{extensions}) { - # Under mod_perl, mod_perl.pl populates $extension_packages for us. - if (!$extension_packages) { - $extension_packages = Bugzilla::Extension->load_all(); - } - my @extensions; - foreach my $package (@$extension_packages) { - my $extension = $package->new(); - if ($extension->enabled) { - push(@extensions, $extension); - } - } - $cache->{extensions} = \@extensions; - } - return $cache->{extensions}; + return { map { $_ => extension_info($_) } Bugzilla::Extension::loaded() }; } sub feature { diff --git a/Bugzilla/Error.pm b/Bugzilla/Error.pm index e3d8f767b..9c1a839a3 100644 --- a/Bugzilla/Error.pm +++ b/Bugzilla/Error.pm @@ -125,8 +125,8 @@ sub _throw_error { _throw_error('code', 'template_error', $vars); } - # If we failed processing template error, simply die - $mode = ERROR_MODE_DIE; + # If we failed processing template error, just die + die bless { message => ($msg ||= _error_message($type, $error, $vars)), type => $type, error => $error, vars => $vars }; } # Report error into [$datadir/] params.error_log if requested @@ -161,19 +161,22 @@ sub _throw_error print Bugzilla->cgi->header(); print $message; } - elsif ($mode == ERROR_MODE_DIE_SOAP_FAULT || Bugzilla->error_mode == ERROR_MODE_JSON_RPC) + elsif ($mode == ERROR_MODE_DIE_SOAP_FAULT || $mode == ERROR_MODE_JSON_RPC) { # Clone the hash so we aren't modifying the constant. my %error_map = %{ WS_ERROR_CODE() }; - require Bugzilla::Hook; - Bugzilla::Hook::process('webservice_error_codes', - { error_map => \%error_map }); + eval + { + require Bugzilla::Hook; + Bugzilla::Hook::process('webservice_error_codes', + { error_map => \%error_map }); + }; my $code = $error_map{$error}; if (!$code) { $code = ERROR_UNKNOWN_FATAL if $type eq 'code'; $code = ERROR_UNKNOWN_TRANSIENT if $type eq 'user'; } - if (Bugzilla->error_mode == ERROR_MODE_DIE_SOAP_FAULT) { + if ($mode == ERROR_MODE_DIE_SOAP_FAULT) { die bless { message => SOAP::Fault->faultcode($code)->faultstring($message) }; } else { @@ -190,7 +193,7 @@ sub _throw_error # we die with no message. JSON::RPC checks raise_error before # it checks $@, so it returns the proper error. die if _in_eval(); - $server->response($server->error_response_header); + #$server->response($server->error_response_header); # FIXME VERY UGLY HACK } } elsif ($mode == ERROR_MODE_AJAX) @@ -204,6 +207,10 @@ sub _throw_error my $json = new JSON; print $json->encode($err); } + else + { + die "Fatal error: '$mode' is an unknown error reporting mode!"; + } exit; } diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 44f6a9c0a..087c540e7 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -2404,7 +2404,7 @@ sub _not_in_search_results sub LookupNamedQuery { my ($name, $sharer_id, $query_type, $throw_error) = @_; - $throw_error = 1 unless defined $throw_error; + $throw_error = THROW_ERROR unless defined $throw_error; Bugzilla->login(LOGIN_REQUIRED); @@ -2412,11 +2412,18 @@ sub LookupNamedQuery my $query = Bugzilla::Search::Saved->$constructor( { user => $sharer_id, name => $name }); - return $query if (!$query and !$throw_error); - - if (defined $query_type and $query->type != $query_type) { - ThrowUserError("missing_query", { queryname => $name, - sharer_id => $sharer_id }); + if (!$query || + defined $query_type && $query->type != $query_type) + { + if ($throw_error) + { + ThrowUserError("missing_query", { queryname => $name, + sharer_id => $sharer_id }); + } + else + { + return undef; + } } $query->url diff --git a/Bugzilla/WebService/Bugzilla.pm b/Bugzilla/WebService/Bugzilla.pm index c14cc7dea..06faf50f9 100644 --- a/Bugzilla/WebService/Bugzilla.pm +++ b/Bugzilla/WebService/Bugzilla.pm @@ -38,14 +38,7 @@ sub version { sub extensions { my $self = shift; - - my %retval; - foreach my $extension (@{ Bugzilla->extensions }) { - my $version = $extension->VERSION || 0; - my $name = $extension->NAME; - $retval{$name}->{version} = $self->type('string', $version); - } - return { extensions => \%retval }; + return { extensions => Bugzilla->extensions }; } sub timezone { diff --git a/contrib/cookies.txt b/contrib/cookies.txt deleted file mode 100644 index 2b81d8df2..000000000 --- a/contrib/cookies.txt +++ /dev/null @@ -1 +0,0 @@ -#LWP-Cookies-1.0 diff --git a/jsonrpc.cgi b/jsonrpc.cgi index ad910e79e..f6ff0b8d2 100755 --- a/jsonrpc.cgi +++ b/jsonrpc.cgi @@ -35,7 +35,10 @@ BEGIN { use Bugzilla::WebService::Server::JSONRPC; Bugzilla->usage_mode(USAGE_MODE_JSON); +Bugzilla->error_mode(ERROR_MODE_JSON_RPC); local @INC = (bz_locations()->{extensionsdir}, @INC); my $server = new Bugzilla::WebService::Server::JSONRPC; + +$Bugzilla::Error::IN_EVAL++; $server->dispatch(WS_DISPATCH)->handle(); diff --git a/qa/t/lib/QA/RPC.pm b/qa/t/lib/QA/RPC.pm index 4a00d556c..ed857c91c 100644 --- a/qa/t/lib/QA/RPC.pm +++ b/qa/t/lib/QA/RPC.pm @@ -58,7 +58,7 @@ sub bz_call_fail { or diag("Returned: " . Dumper($call->result)); if (defined $faultstring) { cmp_ok(trim($call->faultstring), '=~', $faultstring, - $self->TYPE . ": Got correct fault for $method"); + $self->TYPE . ": Got correct fault for $method"); #or pause(); } ok($call->faultcode && $call->faultcode < 32000 && $call->faultcode > -32000, diff --git a/qa/t/webservice_bugzilla.t b/qa/t/webservice_bugzilla.t index 8de9a6183..bcdf4bda8 100644 --- a/qa/t/webservice_bugzilla.t +++ b/qa/t/webservice_bugzilla.t @@ -5,7 +5,7 @@ use strict; use warnings; use lib qw(lib); -use Test::More tests => 28; +use Test::More "no_plan"; use QA::Util; my ($xmlrpc, $jsonrpc, $config) = get_rpc_clients(); @@ -21,7 +21,7 @@ foreach my $rpc ($jsonrpc, $xmlrpc) { my $ext_call = $rpc->bz_call_success('Bugzilla.extensions'); my $extensions = $ext_call->result->{extensions}; isa_ok($extensions, 'HASH', 'extensions'); - is(scalar keys %$extensions, 0, 'No extensions returned'); + #is(scalar keys %$extensions, 0, 'No extensions returned'); my $time_call = $rpc->bz_call_success('Bugzilla.time'); my $time_result = $time_call->result; diff --git a/template/en/custom/global/user-error-page.html.tmpl b/template/en/custom/global/user-error-page.html.tmpl index 15c96c3ee..2e5682e32 100644 --- a/template/en/custom/global/user-error-page.html.tmpl +++ b/template/en/custom/global/user-error-page.html.tmpl @@ -15,6 +15,7 @@ [%# We only want HTML error messages for ERROR_MODE_WEBPAGE %] [% USE Bugzilla %] + [% IF Bugzilla.error_mode != constants.ERROR_MODE_WEBPAGE %] [% IF Bugzilla.usage_mode == constants.USAGE_MODE_BROWSER %] [% error_message FILTER none %]