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 59     59   1330 use strict;
  59         132  
  59         1638  
4 59     59   324 use warnings;
  59         127  
  59         1764  
5 59     59   304 use Exporter 5.57 'import';
  59         1015  
  59         25740  
6              
7             our @EXPORT = qw/dedupe_prereqs_and_features/;
8              
9             sub dedupe_prereqs_and_features {
10 58     58 0 162 my ($prereqs, $features) = @_;
11              
12 58         198 my @valid_features = grep defined, values %$features;
13 58         210 for my $phase ($prereqs->phases) {
14 185         2017 my $requires = $prereqs->requirements_for($phase, 'requires');
15 185         5577 for my $type (qw/recommends suggests/) {
16 370         822 my $target = $prereqs->requirements_for($phase, $type);
17 370         11289 _dedupe($requires, $target);
18             }
19 185         457 for my $feature (@valid_features) {
20 50         99 for my $type (qw/requires recommends suggests/) {
21 150         376 my $target = $feature->requirements_for($phase, $type);
22 150         4637 _dedupe($requires, $target);
23             }
24             }
25 185         428 my $recommends = $prereqs->requirements_for($phase, 'recommends');
26 185         5544 for my $type (qw/suggests/) {
27 185         393 my $target = $prereqs->requirements_for($phase, $type);
28 185         5292 _dedupe($recommends, $target);
29             }
30 185         373 for my $feature (@valid_features) {
31 50         97 for my $type (qw/recommends suggests/) {
32 100         225 my $target = $feature->requirements_for($phase, $type);
33 100         2858 _dedupe($recommends, $target);
34             }
35             }
36 185         445 my $suggests = $prereqs->requirements_for($phase, 'suggests');
37 185         5473 for my $feature (@valid_features) {
38 50         96 for my $type (qw/suggests/) {
39 50         108 my $target = $feature->requirements_for($phase, $type);
40 50         1439 _dedupe($suggests, $target);
41             }
42             }
43             }
44             }
45              
46             sub _dedupe {
47 855     855   1557 my ($source, $target) = @_;
48 855         1742 my @modules = $source->required_modules;
49 855         4607 for my $module (@modules) {
50 344         836 my $version = $target->requirements_for_module($module);
51 344 100       3587 next unless defined $version;
52 21 50       111 next unless $version =~ /^[0-9._]+$/;
53 21 50       66 next unless $source->accepts_module($module, $version);
54 21         664 $target->clear_requirement($module);
55             }
56             }
57              
58             1;
59              
60             __END__