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 72     72   396 use strict;
  72         206  
  72         2163  
4 72     72   268 use warnings;
  72         104  
  72         3386  
5 72     72   279 use Exporter 5.57 'import';
  72         976  
  72         28622  
6              
7             our @EXPORT = qw/dedupe_prereqs_and_features/;
8              
9             sub dedupe_prereqs_and_features {
10 72     72 0 164 my ($prereqs, $features) = @_;
11              
12 72         169 my @valid_features = grep defined, values %$features;
13 72         243 for my $phase ($prereqs->phases) {
14 221         1763 my $requires = $prereqs->requirements_for($phase, 'requires');
15 221         4530 for my $type (qw/recommends suggests/) {
16 442         710 my $target = $prereqs->requirements_for($phase, $type);
17 442         9520 _dedupe($requires, $target);
18             }
19 221         332 for my $feature (@valid_features) {
20 50         75 for my $type (qw/requires recommends suggests/) {
21 150         225 my $target = $feature->requirements_for($phase, $type);
22 150         2899 _dedupe($requires, $target);
23             }
24             }
25 221         377 my $recommends = $prereqs->requirements_for($phase, 'recommends');
26 221         4149 for my $type (qw/suggests/) {
27 221         405 my $target = $prereqs->requirements_for($phase, $type);
28 221         4217 _dedupe($recommends, $target);
29             }
30 221         316 for my $feature (@valid_features) {
31 50         79 for my $type (qw/recommends suggests/) {
32 100         157 my $target = $feature->requirements_for($phase, $type);
33 100         1852 _dedupe($recommends, $target);
34             }
35             }
36 221         377 my $suggests = $prereqs->requirements_for($phase, 'suggests');
37 221         4327 for my $feature (@valid_features) {
38 50         71 for my $type (qw/suggests/) {
39 50         75 my $target = $feature->requirements_for($phase, $type);
40 50         923 _dedupe($suggests, $target);
41             }
42             }
43             }
44             }
45              
46             sub _dedupe {
47 963     963   1279 my ($source, $target) = @_;
48 963         1407 my @modules = $source->required_modules;
49 963         3378 for my $module (@modules) {
50 472         817 my $version = $target->requirements_for_module($module);
51 472 100       3310 next unless defined $version;
52 21 50       92 next unless $version =~ /^[0-9._]+$/;
53 21 50       49 next unless $source->accepts_module($module, $version);
54 21         394 $target->clear_requirement($module);
55             }
56             }
57              
58             1;
59              
60             __END__