File Coverage

lib/Slaughter/Packages/freebsd.pm
Criterion Covered Total %
statement 12 35 34.2
branch 0 12 0.0
condition 1 6 16.6
subroutine 3 7 42.8
pod 4 5 80.0
total 20 65 30.7


line stmt bran cond sub pod time code
1             #!/usr/bin/perl -w
2              
3             =head1 NAME
4            
5             Slaughter::Packages::freebsd - Abstractions for FreeBSD package management.
6            
7             =cut
8              
9             =head1 DESCRIPTION
10            
11             This module contains code for dealing with system packages, using the ports
12             system.
13            
14             =cut
15              
16             =head1 METHODS
17            
18             Now follows documentation on the available methods.
19            
20             =cut
21              
22 1     1   989 use strict;
  1         1  
  1         27  
23 1     1   3 use warnings;
  1         1  
  1         291  
24              
25              
26             package Slaughter::Packages::freebsd;
27              
28              
29             our $VERSION = "3.0.5";
30              
31              
32             =head2 new
33            
34             Create a new instance of this object.
35            
36             =cut
37              
38             sub new
39             {
40 1     1 1 423     my ( $proto, %supplied ) = (@_);
41 1   33     6     my $class = ref($proto) || $proto;
42              
43 1         1     my $self = {};
44              
45             #
46             # Allow user supplied values to override our defaults
47             #
48 1         3     foreach my $key ( keys %supplied )
49                 {
50 0         0         $self->{ lc $key } = $supplied{ $key };
51                 }
52              
53 1         2     bless( $self, $class );
54 1         2     return $self;
55              
56             }
57              
58              
59              
60             =head2 recognised
61            
62             Does the local system match a known type?
63            
64             =cut
65              
66             sub recognised
67             {
68 0     0 1       my ($self) = (@_);
69              
70             #
71             # Is the ports system available?
72             #
73 0 0 0           if ( ( -d "/usr/ports" ) &&
74                      ( -e "/usr/ports/Makefile" ) )
75                 {
76 0                   return ("ports");
77                 }
78              
79 0               return 0;
80             }
81              
82              
83              
84             =head2 isInstalled
85            
86             Is the specified package installed?
87            
88             =cut
89              
90             sub isInstalled
91             {
92 0     0 1       my ( $self, $package ) = (@_);
93              
94             #
95             # Get the type of the system, to make sure we can continue.
96             #
97 0               my $type = $self->recognised();
98 0 0             return 0 unless ($type);
99              
100             #
101             # Found it installed?
102             #
103 0               my $found = 0;
104              
105             #
106             # Output the information about all installed package.
107             #
108 0 0             open my $handle, "-|", "/usr/sbin/pkg_info" or
109                   die "Failed to run pkg_info: $!";
110              
111 0               while ( my $line = <$handle> )
112                 {
113 0                   chomp($line);
114              
115 0 0                 $found = 1 if ( $line =~ /^\Q$package\E/ );
116                 }
117 0               close($handle);
118              
119             #
120             # Return the result.
121             #
122 0               return ($found);
123              
124             }
125              
126              
127              
128             =head2 installPacakge
129            
130             Install a package upon the local system.
131            
132             =cut
133              
134             sub installPackage
135             {
136 0     0 0       my ( $self, $package ) = (@_);
137              
138             #
139             # Get the type of the system, to make sure we can continue.
140             #
141 0               my $type = $self->recognised();
142 0 0             return 0 unless ($type);
143              
144             #
145             # Install
146             #
147 0               system( "/usr/sbin/pkgp_add", "-r", $package );
148              
149              
150             }
151              
152              
153              
154             =head2 removePackage
155            
156             Remove the specified package.
157            
158             =cut
159              
160             sub removePackage
161             {
162 0     0 1       my ( $self, $package ) = (@_);
163              
164             #
165             # Get the type of the system, to make sure we can continue.
166             #
167 0               my $type = $self->recognised();
168 0 0             return 0 unless ($type);
169              
170             #
171             # Remove the package
172             #
173 0               system( "/usr/sbin/pkg_delete", $package );
174             }
175              
176              
177             1;
178              
179              
180              
181             =head1 AUTHOR
182            
183             Steve Kemp <steve@steve.org.uk>
184            
185             =cut
186              
187             =head1 LICENSE
188            
189             Copyright (c) 2010-2015 by Steve Kemp. All rights reserved.
190            
191             This module is free software;
192             you can redistribute it and/or modify it under
193             the same terms as Perl itself.
194             The LICENSE file contains the full text of the license.
195            
196             =cut
197