File Coverage

blib/lib/OTRS/OPM/Maker/Command/dependencies.pm
Criterion Covered Total %
statement 29 29 100.0
branch 2 2 100.0
condition 12 12 100.0
subroutine 8 8 100.0
pod 4 4 100.0
total 55 55 100.0


line stmt bran cond sub pod time code
1             package OTRS::OPM::Maker::Command::dependencies;
2             $OTRS::OPM::Maker::Command::dependencies::VERSION = '0.18';
3             # ABSTRACT: List dependencies of OTRS packages
4              
5 14     14   10693 use strict;
  14         37  
  14         455  
6 14     14   78 use warnings;
  14         44  
  14         363  
7              
8 14     14   2825 use XML::LibXML;
  14         220354  
  14         94  
9              
10 14     14   3725 use OTRS::OPM::Maker -command;
  14         35  
  14         115  
11              
12             sub abstract {
13 1     1 1 4556 return "list dependencies for OTRS packages";
14             }
15              
16             sub usage_desc {
17 1     1 1 933 return "opmbuild dependencies ";
18             }
19              
20             sub validate_args {
21 9     9 1 9788 my ($self, $opt, $args) = @_;
22            
23 9 100 100     167 $self->usage_error( 'need path to .sopm or .opm' ) if
      100        
      100        
      100        
24             !$args or
25             'ARRAY' ne ref $args or
26             !defined $args->[0] or
27             $args->[0] !~ /\.s?opm\z/ or
28             !-f $args->[0];
29             }
30              
31             sub execute {
32 3     3 1 4389 my ($self, $opt, $args) = @_;
33            
34 3         10 my $file = $args->[0];
35 3         29 my $parser = XML::LibXML->new;
36 3         77 my $tree = $parser->parse_file( $file );
37            
38 3         1363 my $root_elem = $tree->getDocumentElement;
39            
40             # retrieve file information
41 3         28 my @package_req = $root_elem->findnodes( 'PackageRequired' );
42 3         196 my @modules_req = $root_elem->findnodes( 'ModuleRequired' );
43            
44 3         99 my %labels = (
45             PackageRequired => 'OTRS add on',
46             ModuleRequired => 'CPAN module',
47             );
48            
49             DEP:
50 3         26 for my $dependency ( @package_req, @modules_req ) {
51 4         29 my $type = $dependency->nodeName;
52 4         16 my $version = $dependency->findvalue( '@Version' );
53 4         406 my $name = $dependency->textContent;
54            
55 4         156 print "$name - $version (" . $labels{$type} . ")\n";
56             }
57             }
58              
59             1;
60              
61             __END__