Branch Coverage

blib/lib/Doit.pm
Criterion Covered Total %
branch 462 732 63.1


line true false branch
41 2 40 if defined $can_coloring
46 40 0 !(($ENV{'TERM'} || '') =~ /^(|dumb)$/) && eval { do { require Term::ANSIColor; 1 } } ? :
51 40 0 if (_can_coloring()) { }
71 1 1 if (defined $label) { }
89 54 0 if ($level eq 'auto')
93 0 310 unless (@stackinfo)
97 54 256 unless ($stackinfo[1] =~ m(([/\\]|^)Doit\.pm$))
113 2 29 unless defined $msg
114 29 2 unless ($msg =~ /\n\z/)
142 118 0 if ($] >= 5.014) { }
146 4 114 if ($@)
180 93 184 if (defined $dir)
183 2 91 if (not defined $pwd or $pwd eq '') { }
188 2 89 unless chdir $pwd
191 3 90 unless chdir $dir
200 14 51 ref $src eq 'ARRAY' ? :
201 0 65 unless @stat
204 21 44 exists $preserve{'ownership'} ? :
205 23 42 exists $preserve{'mode'} ? :
206 1 64 exists $preserve{'time'} ? :
208 0 65 if %preserve
210 63 2 if ($preserve_mode)
211 0 63 unless chmod $stat[2], $dest
214 61 4 if ($preserve_ownership)
216 0 61 unless (chown $stat[4], $stat[5], $dest)
223 41 24 if ($preserve_time)
224 0 41 unless utime $stat[8], $stat[9], $dest
233 0 0 if $> == 0
248 0 0 if (_has_shell_metachars($args))
265 0 0 if ($text ne '' and not $text =~ /[ \t\n\x0a\x0b\x0c\x0d\x85"]/) { }
276 0 0 if ($i > $#text) { }
0 0 elsif ($text[$i] eq '"') { }
300 0 0 if ($char eq '%') { }
0 0 elsif ($char eq q['] or $char eq '"') { }
0 0 elsif ($char eq '<' or $char eq '>' or $char eq '|') { }
303 0 0 if ($inquote) { }
304 0 0 if ($char eq $quote)
313 0 0 unless ($inquote)
365 7 29 if ($dry_run) { }
374 2 0 unless ($msg)
375 2 0 $args ? :
381 2 1 if (&$check($self, \@args, $addinfo))
395 15 17 if (@args and ref $args[0] eq 'HASH')
397 0 32 if %options
402 31 4 if (@s) { }
403 28 3 if (($s[2] & 4095) != $mode)
410 29 3 if (@files_to_change) { }
414 3 25 if ($changed_files != @files_to_change)
415 1 2 if (@files_to_change == 1) { }
1 1 elsif ($changed_files == 0) { }
424 14 15 $quiet ? :
435 2 10 if (@args and ref $args[0] eq 'HASH')
437 0 12 if %options
440 3 9 if (not defined $uid) { }
2 7 elsif (not $uid =~ /^-?\d+$/) { }
444 1 1 unless (defined $_uid)
455 6 5 if (not defined $gid) { }
1 4 elsif (not $gid =~ /^-?\d+$/) { }
459 1 0 unless (defined $_gid)
466 9 1 if ($uid != -1 or $gid != -1)
469 7 3 if (@s) { }
470 0 7 if ($uid != -1 and $s[4] != $uid) { }
0 12 elsif ($gid != -1 and $s[5] != $gid) { }
481 2 8 if (@files_to_change) { }
485 2 0 if ($changed_files != @files_to_change)
486 1 1 if (@files_to_change == 1) { }
1 0 elsif ($changed_files == 0) { }
495 0 2 $quiet ? :
510 1 11 if %opts
512 1 10 unless ($cmd)
515 1 9 if (ref $cmd ne 'ARRAY')
520 2 7 if ($if and not &$if())
523 1 6 if ($doit and $unless and &$unless())
526 1 5 if ($doit and $creates and -e $creates)
530 5 4 if ($doit) { }
532 0 5 if (ref $cmd->[0] eq 'ARRAY') { }
548 1 5 if (not defined $oldfile) { }
1 4 elsif (not defined $newfile) { }
2 2 elsif (-l $newfile) { }
1 1 elsif (-d $newfile) { }
553 0 2 unless my $points_to = readlink $newfile
555 1 1 if ($points_to eq $oldfile)
567 2 1 if ($doit) { }
571 0 2 if $? != 0
584 1 2 if (ref $directories[-1] eq 'HASH')
586 2 1 if (@directories_to_create) { }
590 0 2 unless File::Path::make_path(@directories_to_create, $options)
604 18 2 if (not -d $directory) { }
606 2 16 if (defined $mode) { }
608 1 1 unless mkdir $directory, $mode
614 1 15 unless mkdir $directory
627 1 3 if (ref $directories[-1] eq 'HASH')
629 3 1 if (@directories_to_remove) { }
633 0 3 unless File::Path::remove_tree(@directories_to_remove, $options)
649 1 2 unless rename $from, $to
658 3 14 if (@args and ref $args[0] eq 'HASH')
660 1 16 if %options
661 1 15 if (@args != 2)
667 4 11 if (-d $to) { }
673 11 4 if (not -e $real_to or do { require File::Compare; File::Compare::compare($from, $real_to) != 0 }) { }
677 2 9 unless File::Copy::copy($from, $to)
681 7 4 if (not -e $real_to) { }
684 1 3 if ($quiet) { }
687 0 3 if (eval { do { require IPC::Run; 1 } }) { }
689 0 0 if (eval { do { IPC::Run::run(['diff', '-u', $real_to, $from], '>', \$diff); 1 } }) { }
692 0 0 !$diff_error_shown++ ? :
714 1 11 unless File::Copy::move($from, $to)
724 1 49 if ($? == -1) { }
8 41 elsif ($? & 127) { }
732 0 8 $? & 128 ? :
750 0 46 if %opts
754 22 24 if (defined $prefix_msg)
762 36 92 if ($flag) { }
772 8 3 if (@args and ref $args[0] eq 'HASH')
775 6 5 unless defined $instr
776 0 11 if %options
791 1 2 $quiet || $info ? :
3 7 unless $? == 0
798 4 7 $info ? :
1 9 $quiet ? :
806 1 2 if (@args and ref $args[0] eq 'HASH')
813 34 2 if (@args and ref $args[0] eq 'HASH')
819 0 36 if %options
830 24 11 defined $instr ? :
831 24 10 if (defined $instr)
845 68 31 if ($buf eq '') { }
848 34 34 if $sel->count == 0
857 27 7 if ($errref)
861 2 32 if ($statusref) { }
864 4 28 if ($? != 0)
865 1 3 $quiet || $info ? :
874 4 32 $info ? :
21 14 $quiet ? :
882 1 2 if (@args and ref $args[0] eq 'HASH')
891 0 141 unless open my $fh, '-|', @args
901 125 6 if (@args and ref $args[0] eq 'HASH')
905 0 131 if %options
909 2 128 if ($statusref) { }
912 22 106 if ($? != 0)
913 20 2 $quiet || $info ? :
921 122 9 $info ? :
100 11 $quiet ? :
929 118 3 if (@args and ref $args[0] eq 'HASH')
936 5 1 if (-d $directory) { }
938 1 4 unless rmdir $directory
954 0 0 if (not $success)
961 0 0 if (ref $arg eq 'ARRAY') { }
976 2 1 if (not defined $ENV{$key} or $ENV{$key} ne $val) { }
979 1 1 defined $ENV{$key} ? :
991 1 1 if (-l $newfile) { }
1 0 elsif (not -e $newfile) { }
992 0 1 unless my $points_to = readlink $newfile
994 0 1 if ($points_to ne $oldfile)
1002 1 1 if ($doit) { }
1004 0 1 unless symlink $oldfile, $newfile
1016 40 90 if (@args and ref $args[0] eq 'HASH')
1020 0 130 if %options
1026 17 112 if ($? != 0)
1038 2 128 $info ? :
2 128 $quiet ? :
1050 0 1 if (@args and ref $args[0] eq 'HASH')
1059 28 1 if (not -e $file) { }
1061 0 28 unless open my $fh, '>>', $file
1066 0 1 unless utime time, time, $file
1080 15 2 unless (-e $file)
1082 0 15 unless open my $fh, '>>', $file
1087 14 1 if (@commands) { }
1100 25 3 if (-e $file or -l $file)
1104 18 2 if (@files_to_remove) { }
1106 0 18 unless unlink @files_to_remove
1117 1 1 if (defined $ENV{$key}) { }
1133 1 9 unless (defined $atime)
1136 1 9 unless (defined $mtime)
1143 10 4 if (@s) { }
1144 9 1 if ($s[8] != $atime or $s[9] != $mtime)
1152 9 1 if (@files_to_change) { }
1156 3 6 if ($changed_files != @files_to_change)
1157 1 2 if (@files_to_change == 1) { }
1 1 elsif ($changed_files == 0) { }
1177 12 20 if (@args and ref $args[0] eq 'HASH')
1179 1 31 exists $options{'atomic'} ? :
1180 1 31 if %options
1181 1 30 if (@args != 2)
1188 13 17 if (not -e $filename) { }
12 5 elsif (-s $filename != length $content) { }
1194 0 5 unless open my $fh, '<', $filename
1199 1 4 if ($file_content ne $content)
1205 26 4 if ($doit) { }
1211 25 1 $atomic ? :
1212 1 25 unless open my $ofh, '>', $outfile
1214 13 12 if (-e $filename)
1219 0 25 unless close $ofh
1221 24 1 if ($atomic)
1222 0 24 unless rename $outfile, $filename
1229 4 22 $quiet >= 2 ? :
1230 5 17 if ($quiet) { }
1231 2 3 if ($need_diff) { }
1237 8 9 if ($need_diff) { }
1238 0 8 if (eval { do { require IPC::Run; 1 } }) { }
1240 0 0 if (eval { do { IPC::Run::run(['diff', '-u', $filename, '-'], '<', \$content, '>', \$diff); 1 } }) { }
1243 0 0 !$diff_error_shown++ ? :
1247 8 0 if (eval { do { require File::Temp; 1 } }) { }
1250 8 0 if (close $tempfh) { }
1254 8 0 if (length $diff) { }
1282 3 44 if (@args and ref $args[0] eq 'HASH')
1285 0 47 if ($check and ref $check ne 'CODE')
1286 1 46 if %options
1288 1 45 if (@args < 1)
1293 2 43 unless (-e $file)
1296 2 41 unless (-f $file)
1303 26 20 if ($_->{'add_if_missing'})
1306 10 16 if (defined $_->{'add_after'} or defined $_->{'add_after_first'} or defined $_->{'add_before'} or defined $_->{'add_before_last'}) { }
1317 0 10 if ($defines != 1)
1323 4 6 if (defined $_->{'add_after'}) { }
2 4 elsif (defined $_->{'add_after_first'}) { }
2 2 elsif (defined $_->{'add_before'}) { }
2 0 elsif (defined $_->{'add_before_last'}) { }
1346 4 2 $reverse ? :
1347 4 2 $reverse ? :
1348 4 2 $reverse ? :
1349 11 2 $reverse ? :
1350 5 7 if ($arrayref->[$i] =~ /$add/)
1351 3 2 if ($do_after) { }
1360 1 5 if (not $found)
1373 29 17 if ($_->{'unless_match'}) { }
16 1 elsif ($_->{'match'}) { }
1374 26 3 if (ref $_->{'unless_match'} ne 'Regexp')
1378 1 28 unless ($_->{'action'})
1381 1 27 if (ref $_->{'action'} ne 'CODE')
1386 3 13 if (ref $_->{'match'} ne 'Regexp')
1390 3 13 $_->{'action'} ? :
7 9 defined $_->{'replace'} ? :
5 11 defined $_->{'delete'} ? :
1391 1 15 if ($consequences != 1)
1394 3 12 if ($_->{'action'}) { }
7 5 elsif (defined $_->{'replace'}) { }
5 0 elsif (defined $_->{'delete'}) { }
1395 1 2 if (ref $_->{'action'} ne 'CODE')
1415 0 36 unless File::Copy::copy($file, $tmpfile)
1420 0 36 unless tie my @lines, 'Tie::File', $tmpfile
1427 0 44 if ($debug)
1428 18 26 if ($lines[$line_i] =~ /$match/)
1429 9 9 if (exists $match_action->{'replace'}) { }
6 3 elsif (exists $match_action->{'delete'}) { }
1431 9 0 if ($lines[$line_i] ne $replace)
1437 5 1 if ($match_action->{'delete'})
1455 8 62 if ($line =~ /$match/)
1468 25 10 if ($no_of_changes)
1471 2 22 if ($check)
1475 0 1 unless &$check($tmpfile)
1478 0 23 unless rename $tmpfile, $file
1483 0 25 if (eval { do { require IPC::Run; 1 } }) { }
1484 0 0 unless (eval { do { IPC::Run::run(['diff', '-u', $file, $tmpfile], '>', \$diff); 1 } })
1485 0 0 !$diff_error_shown++ ? :
1496 25 10 if ($no_of_changes) { }
1520 42 0 if (@commands)
1528 380 186 if (exists $command->{'msg'})
1531 532 34 if (exists $command->{'code'})
1533 422 68 if (exists $command->{'rv'}) { }
1546 15 2 if (exists $command->{'msg'})
1549 16 1 if (exists $command->{'code'})
1550 13 3 if (exists $command->{'rv'}) { }
1566 0 36 if %options
1585 18 570 if ($self->{'dryrun'}) { }
1598 3 9 if ($component_or_module =~ /::/) { }
1605 2 4 if $_->{'module'} eq $module
1608 1 9 unless (eval " require $module; 1 ")
1611 0 9 unless my $o = $module->new
1628 0 9 if ($o->can('add_components'))
1658 2 4 if ($context eq 'a') { }
1663 2 4 if ($@) { }
1673 6 0 unless $sub =~ /::/
1680 2 0 unless $sub =~ /::/
1719 0 14 if (not defined $ret) { }
0 14 elsif (not $ret) { }
1725 0 14 unless read $fh, $buf, $length
1740 0 0 unless defined $pid
1741 0 0 if (eval { do { require POSIX; defined &POSIX::WNOHANG } }) { }
1742 0 0 if ($self->{'debug'})
1752 0 0 if (time - $start_time >= 2)
1758 0 0 if (not $got_pid)
1762 0 0 if (not $done_POSIX_warning++)
1778 0 0 if %opts
1782 0 0 if $ret
1784 0 0 if ($fast_tries and eval { do { require Time::HiRes; 1 } }) { }
1789 0 0 $try <= $fast_tries && defined &Time::HiRes::sleep ? :
1790 0 0 if $retry_msg_code
1808 0 1 if %options
1822 2 5 wantarray ? :
1825 2 5 if (defined $rettype and $rettype eq 'e') { }
5 0 elsif (defined $rettype and $rettype eq 'r') { }
1828 2 3 if ($context eq 'a') { }
1834 0 0 defined $self->{'label'} ? :
0 0 defined $rettype ? :
1848 0 0 if %options
1867 0 0 if ($self->{'debug'}) { }
1877 0 0 if (not $self->{'excl'} and -e $sockpath)
1881 0 0 unless my $sock = 'IO::Socket::UNIX'->new('Type', SOCK_STREAM(), 'Local', $sockpath, 'Listen', 1)
1891 0 0 if $ready[0] != $sock
1898 0 0 if (not defined $context) { }
0 0 elsif ($data[0] =~ /^exit$/) { }
1924 0 1 if %options
1926 0 1 unless $infh
1927 0 1 unless $outfh
1941 0 7 if (not defined $context) { }
1 6 elsif ($data[0] =~ /^exit$/) { }
1947 0 6 unless open my $oldout, '>&STDOUT'
1951 0 6 unless open STDOUT, '>', '/dev/stderr'
1954 0 6 unless open STDOUT, '>&', $oldout
1976 0 0 if $^O eq 'linux'
1991 0 0 unless (defined $realscript)
1992 0 0 if ($realscript ne '-e') { }
2012 0 0 unless delete $opts{'sudo_opts'}
2015 0 0 unless delete $opts{'components'}
2017 0 0 if %opts
2041 0 0 if ($? != 0)
2052 0 0 $class->_can_LANS ? :
2055 0 0 $debug ? :
0 0 $LANS_PREFIX ? :
0 0 $dry_run ? :
2066 0 0 if (not defined $worker_pid) { }
0 0 elsif ($worker_pid == 0) { }
2069 0 0 if $debug
2079 0 0 if $debug
2103 0 0 unless delete $opts{'components'}
2111 0 0 unless defined $dest_os
2113 0 0 unless $put_to_remote =~ /^(rsync_put|scp_put)$/
2117 0 0 if (defined $umask and not $umask =~ /^\d+$/)
2121 0 0 if %opts
2124 0 0 $forward_agent ? :
0 0 $tty ? :
2128 0 0 $forward_agent ? :
0 0 $master_opts ? :
2134 0 0 if (UNIVERSAL::isa($ssh_or_host, 'Net::OpenSSH')) { }
2140 0 0 if $ssh->error
2145 0 0 if (($bootstrap || '') eq 'perl')
2152 0 0 if ($dest_os eq 'MSWin32') { }
2157 0 0 if ($debug)
2162 0 0 if ($FindBin::RealScript ne '-e')
2169 0 0 $dest_os ne 'MSWin32' ? :
2183 0 0 unless ($seen_dir{$target_dir})
2185 0 0 if ($dest_os eq 'MSWin32') { }
2201 0 0 $dest_os eq 'MSWin32' ? :
2208 0 0 if (defined $as)
2209 0 0 if ($as eq 'root') { }
2217 0 0 if ($dest_os eq 'MSWin32') { }
2218 0 0 $debug ? :
0 0 $dry_run ? :
2232 0 0 defined $umask ? :
0 0 $debug ? :
0 0 $dry_run ? :
2246 0 0 if $debug
2251 0 0 if ($dest_os eq 'MSWin32') { }
2266 0 0 if $debug
2279 0 0 if ($self->{'ssh'})
2280 0 0 if $self->{'ssh'}->can('disconnect')
2283 0 0 if ($self->{'rpc'})
2296 0 0 unless defined $peer
2298 0 0 if %options
2308 0 0 if ($debug) { }
2327 0 0 if $sock
2337 0 0 unless ($sock)
2346 0 0 unless read $infh, $length_buf, 4
2352 0 0 if $got == $length
2353 0 0 if $got > $length
2366 0 0 if eof $infh