File Coverage

blib/lib/Portable/CPAN.pm
Criterion Covered Total %
statement 12 44 27.2
branch 0 16 0.0
condition 0 6 0.0
subroutine 4 6 66.6
pod 0 2 0.0
total 16 74 21.6


line stmt bran cond sub pod time code
1             package Portable::CPAN;
2            
3 1     1   860 use 5.008;
  1         3  
  1         32  
4 1     1   4 use strict;
  1         1  
  1         22  
5 1     1   5 use warnings;
  1         1  
  1         17  
6 1     1   4 use Portable::FileSpec;
  1         1  
  1         557  
7            
8             our $VERSION = '1.22';
9            
10             # Create the enumerations
11             our %bin = map { $_ => 1 } qw{
12             bzip2 curl ftp gpg gzip lynx
13             ncftp ncftpget pager patch
14             shell tar unzip wget
15             };
16             our %post = map { $_ => 1 } qw{
17             make_arg make_install_arg makepl_arg
18             mbuild_arg mbuild_install_arg mbuildpl_arg
19             };
20             our %file = ( %bin, histfile => 1 );
21            
22            
23            
24            
25            
26             #####################################################################
27             # Constructor
28            
29             sub new {
30 0     0 0   my $class = shift;
31 0           my $parent = shift;
32 0 0         unless ( Portable::_HASH($parent->portable_cpan) ) {
33 0           die('Missing or invalid cpan key in portable.perl');
34             }
35            
36             # Create the object
37 0           my $self = bless { }, $class;
38            
39             # Map the
40 0           my $cpan = $parent->portable_cpan;
41 0           my $root = $parent->dist_root;
42 0           foreach my $key ( sort keys %$cpan ) {
43 0 0 0       unless (
      0        
44             defined $cpan->{$key}
45             and
46             length $cpan->{$key}
47             and not
48             $post{$key}
49             ) {
50 0           $self->{$key} = $cpan->{$key};
51 0           next;
52             }
53 0 0         if ($file{$key}) {
54 0           $self->{$key} = Portable::FileSpec::catfile($root, split /\//, $cpan->{$key});
55             }
56             else {
57 0           $self->{$key} = Portable::FileSpec::catdir($root, split /\//, $cpan->{$key});
58             }
59             }
60 0           my $config = $parent->config;
61 0           foreach my $key ( sort keys %post ) {
62 0 0         next unless defined $self->{$key};
63 0           $self->{$key} =~ s/\$(\w+)/$config->{$1}/g;
64             }
65            
66 0           return $self;
67             }
68            
69             sub apply {
70 0     0 0   my $self = shift;
71 0           my $parent = shift;
72            
73             # Load the CPAN configuration
74 0           require CPAN::Config;
75            
76             # Overwrite the CPAN config entries
77 0           foreach my $key ( sort keys %$self ) {
78 0           $CPAN::Config->{$key} = $self->{$key};
79             }
80            
81             # Confirm we got all the paths
82 0           my $volume = quotemeta $parent->dist_volume;
83 0           foreach my $key ( sort keys %$CPAN::Config ) {
84 0 0         next unless defined $CPAN::Config->{$key};
85 0 0         next if $CPAN::Config->{$key} =~ /$volume/;
86 0 0         next unless $CPAN::Config->{$key} =~ /\b[a-z]\:/i;
87 0 0         next if -e $CPAN::Config->{$key};
88 0           die "Failed to localize \$CPAN::Config->{$key} ($CPAN::Config->{$key})";
89             }
90            
91 0           return 1;
92             }
93            
94             1;