File Coverage

blib/lib/R/Setup/Local.pm
Criterion Covered Total %
statement 12 54 22.2
branch 0 28 0.0
condition 0 6 0.0
subroutine 5 10 50.0
pod 0 5 0.0
total 17 103 16.5


line stmt bran cond sub pod time code
1             # perl program
2             # requires: R instance with local repo
3             # pulls: a list of package ids and the package tars
4             # isntalls: R binary, R packages on local machine
5             #
6             # Copyright (C) 2015, Snehasis Sinha
7             #
8              
9             package R::Setup::Local;
10              
11 2     2   21188 use 5.010001;
  2         7  
12 2     2   11 use strict;
  2         3  
  2         43  
13 2     2   8 use warnings;
  2         4  
  2         50  
14 2     2   1013 use LWP::UserAgent;
  2         51134  
  2         119  
15              
16             our @ISA = qw();
17             our $VERSION = '0.01';
18              
19 2     2   1294 BEGIN { $| = 1 } # flush STDOUT buffer
20              
21             # package methods
22              
23             sub new {
24 0     0 0   my $class = shift;
25 0           my %params = @_;
26             my $self = {
27             _url => $params{'urlbase'}, # local url
28             _pkglist => $params{'packagelist'} || 'tarlist', #list of tars
29             _binary => $params{'binary'} || 'R-3.1.2.tar.gz',
30             _lwp => undef,
31 0   0       _verbose => $params{'verbose'} || 1, # default:yes
      0        
      0        
32             };
33 0           bless $self, $class;
34 0           return $self;
35             }
36              
37             # wget implementation
38             # package=>pkg_ver.tar.gz or R-3.1.2.tar.gz
39             # type=>package index source
40             sub p_wget {
41 0     0 0   my ($self, %args) = (@_);
42 0           my $res;
43 0           my $uri = $self->{'_url'};
44              
45 0           $uri .= "/".$args{'package'};
46 0           $res = $self->{'_lwp'}->get ( $uri );
47              
48 0 0         if ( $res->is_success ) {
49 0 0         open TARGZ, '>'.$args{'package'} or die $!;
50 0           print TARGZ $res->decoded_content;
51 0           close TARGZ;
52             }
53 0           return $res->is_success;
54             }
55              
56             sub p_connect {
57 0     0 0   my ($self) = (@_);
58            
59 0 0         unless (defined $self->{'_lwp'}) {
60 0           $self->{'_lwp'} = LWP::UserAgent->new;
61 0           $self->{'_lwp'}->timeout(10);
62 0 0         print "user agent connected\n" if $self->{'_verbose'};
63             }
64             }
65              
66             sub pr {
67 0     0 0   my ($self, %args) = (@_);
68 0 0         return unless $self->{'_verbose'};
69 0 0         print sprintf "%-40s ... ", $args{message} if defined $args{message};
70 0 0         print sprintf " _%s_\n", $args{state} if defined $args{state};
71             }
72              
73             sub download_local {
74 0     0 0   my ($self) = (@_);
75              
76             # connect
77 0           $self->p_connect;
78              
79             # download binary
80 0 0         if ( -f $self->{'_binary'} ) {
81 0           $self->pr ( message=>$self->{'_binary'}, state=>'here' );
82             } else {
83 0           $self->pr ( message=>$self->{'_binary'} );
84 0 0         $self->p_wget( package => $self->{'_binary'} )
85             ? $self->pr ( state=>'done' )
86             : $self->pr ( state=>'failed' )
87             }
88              
89             # download package list
90 0 0         unless ( -f $self->{'_pkglist'} ) {
91 0           $self->pr ( message=>$self->{'_pkglist'} );
92 0 0         $self->p_wget( package => $self->{'_pkglist'} )
93             ? $self->pr ( state=>'done' )
94             : $self->pr ( state=>'failed' )
95             }
96            
97             # download packages
98 0 0         open PACKAGES, '<'.$self->{'_pkglist'} or die $!;
99 0           while ( ) {
100 0           chomp;
101 0 0         if ( -f $_ ) {
102 0           $self->pr ( message=>$_, state=>'here' );
103 0           next;
104             }
105 0           $self->pr ( message=>$_ );
106 0 0         $self->p_wget( package => $_ )
107             ? $self->pr ( state=>'done' )
108             : $self->pr ( state=>'failed' )
109             }
110 0           close PACKAGES;
111             }
112              
113             1;
114              
115             __END__