File Coverage

lib/Rex/SCM/Subversion.pm
Criterion Covered Total %
statement 19 47 40.4
branch 1 16 6.2
condition 0 3 0.0
subroutine 7 9 77.7
pod 0 2 0.0
total 27 77 35.0


line stmt bran cond sub pod time code
1             package Rex::SCM::Subversion;
2              
3 1     1   17 use v5.12.5;
  1         5  
4 1     1   5 use warnings;
  1         2  
  1         49  
5              
6             our $VERSION = '1.14.2.3'; # TRIAL VERSION
7              
8 1     1   12 use Cwd qw(getcwd);
  1         2  
  1         79  
9 1     1   7 use Rex::Commands::Fs;
  1         10  
  1         12  
10 1     1   10 use Rex::Helper::Run;
  1         7  
  1         77  
11              
12 1     1   6 use vars qw($CHECKOUT_COMMAND);
  1         9  
  1         151  
13              
14             BEGIN {
15 1     1   5583 my $version = qx{svn --version --quiet 2>/dev/null};
16 1 50       598 if ($version) {
17 0           my @parts = split( /\./, $version );
18              
19 0 0         if ( $parts[1] <= 5 ) {
20 0           $CHECKOUT_COMMAND = "svn --non-interactive %s checkout %s %s";
21             }
22             else {
23 0           $CHECKOUT_COMMAND =
24             "svn --non-interactive --trust-server-cert %s checkout %s %s";
25             }
26             }
27             }
28              
29             sub new {
30 0     0 0   my $that = shift;
31 0   0       my $proto = ref($that) || $that;
32 0           my $self = {@_};
33              
34 0           bless( $self, $proto );
35              
36 0           return $self;
37             }
38              
39             sub checkout {
40 0     0 0   my ( $self, $repo_info, $checkout_to, $checkout_opt ) = @_;
41              
42 0           my $special_opts = "";
43              
44 0 0         if ( exists $repo_info->{"username"} ) {
45 0           $special_opts = " --username '" . $repo_info->{"username"} . "'";
46             }
47              
48 0 0         if ( exists $repo_info->{"password"} ) {
49 0           $special_opts .= " --password '" . $repo_info->{"password"} . "'";
50             }
51              
52 0           my $checkout_cmd;
53              
54 0 0         if ( !is_dir($checkout_to) ) {
    0          
55             $checkout_cmd = sprintf( $CHECKOUT_COMMAND,
56 0           $special_opts, $repo_info->{"url"}, $checkout_to );
57             }
58             elsif ( is_dir("$checkout_to/.svn") ) {
59 0           $checkout_cmd = "svn up $checkout_to";
60             }
61             else {
62 0           Rex::Logger::info( "Error checking out repository.", "warn" );
63 0           die("Error checking out repository.");
64             }
65 0           Rex::Logger::debug("checkout_cmd: $checkout_cmd");
66              
67             Rex::Logger::info( "Cloning "
68 0 0         . $repo_info->{"url"} . " to "
69             . ( $checkout_to ? $checkout_to : "." ) );
70 0           my $out = i_run "$checkout_cmd", fail_ok => 1;
71 0 0         unless ( $? == 0 ) {
72 0           Rex::Logger::info( "Error checking out repository.", "warn" );
73 0           Rex::Logger::info($out);
74 0           die("Error checking out repository.");
75             }
76              
77             }
78              
79             1;