From af3c716b7dbe9e44719766593f6c51cf30a054e7 Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Tue, 26 Apr 2016 12:59:52 -0400 Subject: Bug 1251100 - checksetup.pl no longer tells admins which modules are installed and which version is installed --- Bugzilla.pm | 55 +++++++++++++------------------------------------------ 1 file changed, 13 insertions(+), 42 deletions(-) (limited to 'Bugzilla.pm') diff --git a/Bugzilla.pm b/Bugzilla.pm index 032d08355..4c983bd1f 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -35,6 +35,7 @@ use Bugzilla::Field; use Bugzilla::Flag; use Bugzilla::Install::Localconfig qw(read_localconfig); use Bugzilla::Install::Util qw(init_console include_languages i_am_persistent); +use Bugzilla::Install::Requirements qw(load_cpan_meta check_cpan_feature); use Bugzilla::Memcached; use Bugzilla::Template; use Bugzilla::Token; @@ -243,28 +244,19 @@ sub api_server { return $cache->{api_server}; } -use constant _CAN_HAS_FEATURE => eval { - require CPAN::Meta; - require Module::Runtime; - require CPAN::Meta::Check; - Module::Runtime->import(qw(require_module)); - CPAN::Meta::Check->import(qw(verify_dependencies)); - 1; - }; - sub feature { my ($class, $feature_name) = @_; - return 0 unless _CAN_HAS_FEATURE; - return unless $class->has_feature($feature_name); + return 0 unless CAN_HAS_FEATURE; + return 0 unless $class->has_feature($feature_name); - my $cache = $class->request_cache; - my $feature = $cache->{feature_map}{$feature_name}; + my $cache = $class->process_cache; + my $feature = $cache->{cpan_meta}->feature($feature_name); # Bugzilla expects this will also load all the modules.. so we have to do that. # Later we should put a deprecation warning here, and favor calling has_feature(). return 1 if $cache->{feature_loaded}{$feature_name}; - my @modules = $feature->requirements_for('runtime', 'requires')->required_modules; - require_module($_) foreach @modules; + my @modules = $feature->prereqs->merged_requirements->required_modules; + Module::Runtime::require_module($_) foreach @modules; $cache->{feature_loaded}{$feature_name} = 1; return 1; } @@ -272,38 +264,17 @@ sub feature { sub has_feature { my ($class, $feature_name) = @_; - return 0 unless _CAN_HAS_FEATURE; + return 0 unless CAN_HAS_FEATURE; - my $cache = $class->request_cache; + my $cache = $class->process_cache; return $cache->{feature}->{$feature_name} if exists $cache->{feature}->{$feature_name}; - my $dir = bz_locations()->{libpath}; - my $feature_map = $cache->{feature_map} //= do { - my @meta_json = map { File::Spec->catfile($dir, $_) } qw( MYMETA.json META.json ); - my $file = first { -f $_ } @meta_json; - my %map; - if ($file) { - open my $meta_fh, '<', $file or die "unable to open $file: $!"; - my $str = do { local $/ = undef; scalar <$meta_fh> }; - trick_taint($str); - close $meta_fh; - - my $meta = CPAN::Meta->load_json_string($str); - - foreach my $feature ($meta->features) { - $map{$feature->identifier} = $feature->prereqs; - } - } - - \%map; - }; - - ThrowCodeError('invalid_feature', { feature => $feature_name }) if !$feature_map->{$feature_name}; - my $success = !verify_dependencies($feature_map->{$feature_name}, 'runtime', 'requires'); + my $meta = $cache->{cpan_meta} //= load_cpan_meta(); + my $feature = eval { $meta->feature($feature_name) } + or ThrowCodeError('invalid_feature', { feature => $feature_name }); - $cache->{feature}{$feature_name} = $success; - return $success; + return $cache->{feature}{$feature_name} = check_cpan_feature($feature)->{ok}; } sub cgi { -- cgit v1.2.3-24-g4f1b