File Coverage

lib/Rex/Pkg/OpenWrt.pm
Criterion Covered Total %
statement 17 50 34.0
branch 0 6 0.0
condition 0 3 0.0
subroutine 6 12 50.0
pod 0 6 0.0
total 23 77 29.8


line stmt bran cond sub pod time code
1             # OpenWrt.pm
2             #
3             # Copyright 2013 Ferenc Erki
4             #
5             # OpenWrt package management module for (R)?ex
6             # based on Rex::Pkg::Debian
7              
8             package Rex::Pkg::OpenWrt;
9              
10 1     1   14 use v5.12.5;
  1         6  
11 1     1   6 use warnings;
  1         3  
  1         39  
12              
13             our $VERSION = '1.14.2.3'; # TRIAL VERSION
14              
15 1     1   15 use Rex::Helper::Run;
  1         4  
  1         65  
16 1     1   8 use Rex::Commands::File;
  1         5  
  1         8  
17 1     1   6 use Rex::Pkg::Base;
  1         6  
  1         9  
18 1     1   38 use base qw(Rex::Pkg::Base);
  1         3  
  1         620  
19              
20             sub new {
21 0     0 0   my $that = shift;
22 0   0       my $proto = ref($that) || $that;
23 0           my $self = $proto->SUPER::new(@_);
24              
25 0           bless( $self, $proto );
26              
27             $self->{commands} = {
28 0           install => 'opkg install %s',
29             install_version => 'opkg install %s',
30             remove => 'opkg remove %s',
31             update_package_db => 'opkg update',
32             };
33              
34 0           return $self;
35             }
36              
37             sub bulk_install {
38 0     0 0   my ( $self, $packages_aref, $option ) = @_;
39              
40 0           delete $option->{version}; # makes no sense to specify the same version for several packages
41              
42 0           $self->update( "@{$packages_aref}", $option );
  0            
43              
44 0           return 1;
45             }
46              
47             sub update_system {
48 0     0 0   my ($self) = @_;
49 0           my @pkgs;
50 0           my @lines = i_run("opkg list-upgradable");
51              
52 0           for my $line (@lines) {
53 0 0         if ( $line =~ m/^(.*) - .* - .*$/ ) { push( @pkgs, $1 ); }
  0            
54             }
55              
56 0           my $packages_to_upgrade = join( " ", @pkgs );
57              
58 0           i_run( "opkg upgrade " . $packages_to_upgrade );
59             }
60              
61             sub get_installed {
62 0     0 0   my ( $self, $pkg ) = @_;
63 0           my @pkgs;
64 0           my $opkg_cmd = 'opkg list-installed';
65 0 0         if ($pkg) {
66 0           $opkg_cmd .= ' | grep "^' . $pkg . ' "';
67             }
68              
69 0           my @lines = i_run $opkg_cmd;
70              
71 0           for my $line (@lines) {
72 0 0         if ( $line =~ m/^(.*) - (.*)$/ ) {
73 0           push(
74             @pkgs,
75             {
76             name => $1,
77             version => $2,
78             }
79             );
80             }
81             }
82              
83 0           return @pkgs;
84             }
85              
86             sub add_repository {
87 0     0 0   my ( $self, %data ) = @_;
88             append_if_no_such_line "/etc/opkg.conf",
89             "src/gz " . $data{"name"} . " " . $data{"url"},
90             $data{"name"},
91 0           $data{"url"};
92             }
93              
94             sub rm_repository {
95 0     0 0   my ( $self, $name ) = @_;
96 0           delete_lines_matching "/etc/opkg.conf" => "src/gz " . $name . " ";
97             }
98              
99             1;