File Coverage

lib/Perl/PrereqScanner/NotQuiteLite/Util/Prereqs.pm
Criterion Covered Total %
statement 41 41 100.0
branch 4 6 66.6
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 50 53 94.3


line stmt bran cond sub pod time code
1             package Perl::PrereqScanner::NotQuiteLite::Util::Prereqs;
2              
3 58     58   401 use strict;
  58         112  
  58         1513  
4 58     58   264 use warnings;
  58         120  
  58         1644  
5 58     58   263 use Exporter 5.57 'import';
  58         936  
  58         23155  
6              
7             our @EXPORT = qw/dedupe_prereqs_and_features/;
8              
9             sub dedupe_prereqs_and_features {
10 57     57 0 148 my ($prereqs, $features) = @_;
11              
12 57         180 my @valid_features = grep defined, values %$features;
13 57         232 for my $phase ($prereqs->phases) {
14 181         1712 my $requires = $prereqs->requirements_for($phase, 'requires');
15 181         4440 for my $type (qw/recommends suggests/) {
16 362         648 my $target = $prereqs->requirements_for($phase, $type);
17 362         8934 _dedupe($requires, $target);
18             }
19 181         322 for my $feature (@valid_features) {
20 50         81 for my $type (qw/requires recommends suggests/) {
21 150         313 my $target = $feature->requirements_for($phase, $type);
22 150         3761 _dedupe($requires, $target);
23             }
24             }
25 181         355 my $recommends = $prereqs->requirements_for($phase, 'recommends');
26 181         4376 for my $type (qw/suggests/) {
27 181         360 my $target = $prereqs->requirements_for($phase, $type);
28 181         4329 _dedupe($recommends, $target);
29             }
30 181         304 for my $feature (@valid_features) {
31 50         82 for my $type (qw/recommends suggests/) {
32 100         210 my $target = $feature->requirements_for($phase, $type);
33 100         2363 _dedupe($recommends, $target);
34             }
35             }
36 181         339 my $suggests = $prereqs->requirements_for($phase, 'suggests');
37 181         4412 for my $feature (@valid_features) {
38 50         86 for my $type (qw/suggests/) {
39 50         93 my $target = $feature->requirements_for($phase, $type);
40 50         1183 _dedupe($suggests, $target);
41             }
42             }
43             }
44             }
45              
46             sub _dedupe {
47 843     843   1284 my ($source, $target) = @_;
48 843         1524 my @modules = $source->required_modules;
49 843         3827 for my $module (@modules) {
50 342         777 my $version = $target->requirements_for_module($module);
51 342 100       3149 next unless defined $version;
52 21 50       117 next unless $version =~ /^[0-9._]+$/;
53 21 50       103 next unless $source->accepts_module($module, $version);
54 21         636 $target->clear_requirement($module);
55             }
56             }
57              
58             1;
59              
60             __END__