File Coverage

blib/lib/OPM/Maker/Command/dependencies.pm
Criterion Covered Total %
statement 46 47 97.8
branch 8 10 80.0
condition n/a
subroutine 10 10 100.0
pod 4 4 100.0
total 68 71 95.7


line stmt bran cond sub pod time code
1             package OPM::Maker::Command::dependencies;
2             $OPM::Maker::Command::dependencies::VERSION = '1.15';
3             # ABSTRACT: List dependencies of OTRS packages
4              
5 21     21   14793 use strict;
  21         51  
  21         646  
6 21     21   108 use warnings;
  21         47  
  21         623  
7              
8 21     21   108 use Carp qw(croak);
  21         39  
  21         1022  
9 21     21   5528 use XML::LibXML;
  21         388437  
  21         150  
10              
11 21     21   6224 use OPM::Maker -command;
  21         54  
  21         173  
12 21     21   83956 use OPM::Maker::Utils qw(reformat_size check_args_sopm);
  21         50  
  21         9645  
13              
14             sub abstract {
15 1     1 1 3486 return "list dependencies for OPM packages";
16             }
17              
18             sub usage_desc {
19 1     1 1 1538 return "opmbuild dependencies ";
20             }
21              
22             sub validate_args {
23 18     18 1 17742 my ($self, $opt, $args) = @_;
24              
25 18         67 my $sopm = check_args_sopm( $args, 1 );
26 18 100       107 $self->usage_error( 'need path to .sopm or .opm' ) if
27             !$sopm;
28             }
29              
30             sub execute {
31 12     12 1 12442 my ($self, $opt, $args) = @_;
32            
33 12         45 my $file = check_args_sopm( $args, 1 );
34              
35 12         22 my %opts;
36 12 50       51 if ( !$ENV{OPM_UNSECURE} ) {
37 12         41 %opts = (
38             no_network => 1,
39             expand_entities => 0,
40             );
41             }
42              
43 12         167 my $size = -s $file;
44              
45             # if file is big, but not "too big"
46 12         34 my $max_size = 31_457_280;
47 12 100       39 if ( $ENV{OPM_MAX_SIZE} ) {
48 7         25 $max_size = reformat_size( $ENV{OPM_MAX_SIZE} );
49             }
50              
51 12 100       42 if ( $size > $max_size ) {
52 3         445 croak "$file too big (max size: $max_size bytes)";
53             }
54              
55 9 50       25 if ( $size > 10_000_000 ) {
56 0         0 $opts{huge} = 1;
57             }
58              
59 9         70 my $parser = XML::LibXML->new( %opts );
60 9         934 my $tree = $parser->parse_file( $file );
61            
62 9         3441 my $root_elem = $tree->getDocumentElement;
63              
64             # retrieve file information
65 9         70 my @package_req = $root_elem->findnodes( 'PackageRequired' );
66 9         547 my @modules_req = $root_elem->findnodes( 'ModuleRequired' );
67            
68 9         248 my %labels = (
69             PackageRequired => 'OPM package',
70             ModuleRequired => 'CPAN module',
71             );
72            
73             DEP:
74 9         36 for my $dependency ( @package_req, @modules_req ) {
75 14         98 my $type = $dependency->nodeName;
76 14         51 my $version = $dependency->findvalue( '@Version' );
77 14         1296 my $name = $dependency->textContent;
78            
79 14         489 print "$name - $version (" . $labels{$type} . ")\n";
80             }
81             }
82              
83             1;
84              
85             __END__