From 5fc80f94271780b6ff6d1dbba554df35e803ac51 Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Tue, 24 Nov 2009 06:09:41 +0000 Subject: Bug 430014: Re-write the code hooks system so that it uses modules instead of individual .pl files Patch by Max Kanat-Alexander (module owner) a=mkanat --- Bugzilla/Install/Requirements.pm | 48 ++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 29 deletions(-) (limited to 'Bugzilla/Install/Requirements.pm') diff --git a/Bugzilla/Install/Requirements.pm b/Bugzilla/Install/Requirements.pm index 1fa53de9b..190dbe968 100644 --- a/Bugzilla/Install/Requirements.pm +++ b/Bugzilla/Install/Requirements.pm @@ -26,7 +26,8 @@ package Bugzilla::Install::Requirements; use strict; use Bugzilla::Constants; -use Bugzilla::Install::Util qw(vers_cmp install_string); +use Bugzilla::Install::Util qw(vers_cmp install_string + extension_requirement_packages); use List::Util qw(max); use Safe; use Term::ANSIColor; @@ -138,9 +139,9 @@ sub REQUIRED_MODULES { }, ); - my $all_modules = _get_extension_requirements( - 'REQUIRED_MODULES', \@modules); - return $all_modules; + my $extra_modules = _get_extension_requirements('REQUIRED_MODULES'); + push(@modules, @$extra_modules); + return \@modules; }; sub OPTIONAL_MODULES { @@ -291,9 +292,9 @@ sub OPTIONAL_MODULES { }, ); - my $all_modules = _get_extension_requirements( - 'OPTIONAL_MODULES', \@modules); - return $all_modules; + my $extra_modules = _get_extension_requirements('OPTIONAL_MODULES'); + push(@modules, @$extra_modules); + return \@modules; }; # This maps features to the files that require that feature in order @@ -312,31 +313,20 @@ use constant FEATURE_FILES => ( updates => ['Bugzilla/Update.pm'], ); -# This implements the install-requirements hook described in Bugzilla::Hook. +# This implements the REQUIRED_MODULES and OPTIONAL_MODULES stuff +# described in in Bugzilla::Extension. sub _get_extension_requirements { - my ($function, $base_modules) = @_; - my @all_modules; - # get a list of all extensions - my @extensions = glob(bz_locations()->{'extensionsdir'} . "/*"); - foreach my $extension (@extensions) { - my $file = "$extension/code/install-requirements.pl"; - if (-e $file) { - my $safe = new Safe; - # This is a very liberal Safe. - $safe->permit(qw(:browse require entereval caller)); - $safe->rdo($file); - if ($@) { - warn $@; - next; - } - my $modules = eval { &{$safe->varglob($function)}($base_modules) }; - next unless $modules; - push(@all_modules, @$modules); + my ($function) = @_; + + my $packages = extension_requirement_packages(); + my @modules; + foreach my $package (@$packages) { + if ($package->can($function)) { + my $extra_modules = $package->$function; + push(@modules, @$extra_modules); } } - - unshift(@all_modules, @$base_modules); - return \@all_modules; + return \@modules; }; sub check_requirements { -- cgit v1.2.3-24-g4f1b