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.16';
3             # ABSTRACT: List dependencies of OTRS packages
4              
5 21     21   15934 use strict;
  21         57  
  21         706  
6 21     21   148 use warnings;
  21         44  
  21         642  
7              
8 21     21   116 use Carp qw(croak);
  21         45  
  21         1057  
9 21     21   5703 use XML::LibXML;
  21         400164  
  21         181  
10              
11 21     21   6886 use OPM::Maker -command;
  21         64  
  21         201  
12 21     21   96453 use OPM::Maker::Utils qw(reformat_size check_args_sopm);
  21         57  
  21         10161  
13              
14             sub abstract {
15 1     1 1 4004 return "list dependencies for OPM packages";
16             }
17              
18             sub usage_desc {
19 1     1 1 1606 return "opmbuild dependencies ";
20             }
21              
22             sub validate_args {
23 18     18 1 19864 my ($self, $opt, $args) = @_;
24              
25 18         63 my $sopm = check_args_sopm( $args, 1 );
26 18 100       95 $self->usage_error( 'need path to .sopm or .opm' ) if
27             !$sopm;
28             }
29              
30             sub execute {
31 12     12 1 16746 my ($self, $opt, $args) = @_;
32            
33 12         54 my $file = check_args_sopm( $args, 1 );
34              
35 12         29 my %opts;
36 12 50       60 if ( !$ENV{OPM_UNSECURE} ) {
37 12         64 %opts = (
38             no_network => 1,
39             expand_entities => 0,
40             );
41             }
42              
43 12         162 my $size = -s $file;
44              
45             # if file is big, but not "too big"
46 12         32 my $max_size = 31_457_280;
47 12 100       44 if ( $ENV{OPM_MAX_SIZE} ) {
48 7         26 $max_size = reformat_size( $ENV{OPM_MAX_SIZE} );
49             }
50              
51 12 100       39 if ( $size > $max_size ) {
52 3         481 croak "$file too big (max size: $max_size bytes)";
53             }
54              
55 9 50       30 if ( $size > 10_000_000 ) {
56 0         0 $opts{huge} = 1;
57             }
58              
59 9         107 my $parser = XML::LibXML->new( %opts );
60 9         1059 my $tree = $parser->parse_file( $file );
61            
62 9         3955 my $root_elem = $tree->getDocumentElement;
63              
64             # retrieve file information
65 9         78 my @package_req = $root_elem->findnodes( 'PackageRequired' );
66 9         567 my @modules_req = $root_elem->findnodes( 'ModuleRequired' );
67            
68 9         250 my %labels = (
69             PackageRequired => 'OPM package',
70             ModuleRequired => 'CPAN module',
71             );
72            
73             DEP:
74 9         41 for my $dependency ( @package_req, @modules_req ) {
75 14         110 my $type = $dependency->nodeName;
76 14         69 my $version = $dependency->findvalue( '@Version' );
77 14         1416 my $name = $dependency->textContent;
78            
79 14         1396 print "$name - $version (" . $labels{$type} . ")\n";
80             }
81             }
82              
83             1;
84              
85             __END__