Branch Coverage

blib/lib/App/migrate.pm
Criterion Covered Total %
branch 129 150 86.0


line true false branch
54 0 32 if 2 > @path
58 0 46 unless $self->{'paths'}{$prev}
59 0 46 unless $self->{'paths'}{$prev}{$next}
68 1 68 unless open my $fh, '<:encoding(UTF-8)', $file
69 2 66 unless -f $file
71 0 10 unless close $fh
76 18 15 if ({VERSION => 1}->{$op->{'op'}}) { }
14 1 elsif ({before_upgrade => 1, upgrade => 1}->{$op->{'op'}}) { }
78 11 7 if ($prev_version ne '')
93 2 9 $restore ? :
112 1 13 if $prev_version eq ''
120 2 11 unless @op and {after_downgrade => 1, downgrade => 1}->{$op[0]{'op'}} || {RESTORE => 1}->{$op[0]{'op'}}
122 2 9 if ({RESTORE => 1}->{$op2->{'op'}}) { }
147 0 7 unless $self->{'on'}{$e}
161 16 1 unless ($just_restored)
173 2 30 if ($step->{'type'} eq 'RESTORE')
180 0 12 unless (eval { do { my $just_restored = 0; for (; 2 <= @path; shift @path) { my($prev, $next) = @path; unless ($just_restored) { $self->_do({'type', 'BACKUP', 'version', $prev, 'prev_version', $prev, 'next_version', $next}); } ; $just_restored = 0; $from = $prev; foreach my $step ($self->get_steps([$prev, $next])) { $self->_do($step); if ($step->{'type'} eq 'RESTORE') { $just_restored = 1; } ; } ; } ; 1 } })
182 0 0 if ($from)
183 0 0 unless eval { do { $self->_do({'type', 'RESTORE', 'version', $from, 'prev_version', $from, 'next_version', $path[-1]}, 1); warn "Successfully undone interrupted migration by RESTORE $from\n"; 1 } }
202 21 8 if $data eq ''
206 0 8 unless close $fh
216 35 13 if ($step->{'type'} eq 'BACKUP' or $step->{'type'} eq 'RESTORE' or $step->{'type'} eq 'VERSION') { }
221 7 6 if ($cmd =~ /\A#!/ms)
223 0 7 unless chmod 0700, $cmd
225 0 13 unless system($cmd, @{$step->{'args'};}) == 0
230 0 48 unless (eval { do { if ($step->{'type'} eq 'BACKUP' or $step->{'type'} eq 'RESTORE' or $step->{'type'} eq 'VERSION') { $self->{'on'}{$step->{'type'}}($step); } else { my $cmd = $step->{'cmd'}; if ($cmd =~ /\A#!/ms) { $cmd = _data2arg($cmd); croak("chmod($cmd): $!") unless chmod 0700, $cmd; } ; die "'$step->{'type'}' failed: $cmd @{$step->{'args'};}\n" unless system($cmd, @{$step->{'args'};}) == 0; print "\n"; } ; 1 } })
231 0 0 if $is_fatal
240 40 20 length $near ? :
247 13 12 if $p->{$to}
273 0 0 unless system($ENV{'SHELL'} // '/bin/sh') == 0
283 34 65 if ($t->{'op'} =~ /\ADEFINE[24]?\z/ms) { }
33 32 elsif ({VERSION => 1}->{$t->{'op'}}) { }
4 28 elsif ({RESTORE => 1}->{$t->{'op'}}) { }
23 5 elsif ({before_upgrade => 1, upgrade => 1}->{$t->{'op'}} or {after_downgrade => 1, downgrade => 1}->{$t->{'op'}}) { }
4 1 elsif ($macro{$t->{'op'}}) { }
284 3 31 if 1 != @{$t->{'args'};}
285 5 26 unless $t->{'args'}[0] =~ /\A(?!#)\S+\z/ms
286 3 23 if $t->{'data'} ne ''
288 3 20 if {DEFINE => 1, DEFINE2 => 1, DEFINE4 => 1, RESTORE => 1, VERSION => 1, after_downgrade => 1, before_upgrade => 1, downgrade => 1, upgrade => 1}->{$name}
289 3 17 if $macro{$name}
290 3 14 if ($t->{'op'} eq 'DEFINE') { }
8 6 elsif ($t->{'op'} eq 'DEFINE2') { }
6 0 elsif ($t->{'op'} eq 'DEFINE4') { }
291 1 2 if @tokens < 1
293 1 1 unless {before_upgrade => 1, upgrade => 1}->{$t1->{'op'}} or {after_downgrade => 1, downgrade => 1}->{$t1->{'op'}}
297 1 7 if @tokens < 2
300 1 6 unless {before_upgrade => 1, upgrade => 1}->{$t1->{'op'}}
301 1 5 unless {after_downgrade => 1, downgrade => 1}->{$t2->{'op'}}
305 1 5 if @tokens < 4
310 1 4 if $t1->{'op'} ne 'before_upgrade'
311 1 3 if $t2->{'op'} ne 'upgrade'
312 1 2 if $t3->{'op'} ne 'downgrade'
313 1 1 if $t4->{'op'} ne 'after_downgrade'
318 2 31 if 1 != @{$t->{'args'};}
320 10 21 if not $t->{'args'}[0] =~ /\A\S+\z/ms or $t->{'args'}[0] =~ m([\x00-\x1F\x7F /?*`"'\\])ms
321 1 20 if $t->{'data'} ne ''
329 1 3 if 0 != @{$t->{'args'};}
330 1 2 if $t->{'data'} ne ''
338 4 5 unless @{$t->{'args'};} or $t->{'data'} =~ /\S/ms
345 14 5 @{$t->{'args'};} ? :
353 2 6 $_->{'data'} =~ /\S/ms ? :
1 8 @{$_->{'args'};} ? :
359 1 1 $t->{'data'} =~ /\S/ms ? :
4 2 @{$t->{'args'};} ? :
3 6 @args ? :
361 1 8 unless @args
378 0 8 unless state $bin = (grep {-x "$_/bash";} split(/:/ms, $ENV{'PATH'}, 0))[0]
379 0 8 $script =~ /\A#!/ms ? :
394 13 173 if (/\A#/ms) { }
145 28 elsif (/\A(\S+)\s*(.*)\z/ms) { }
25 3 elsif (/\A(?:\r?\n|[ ][ ].*)\z/ms) { }
403 17 86 if ($param =~ s/\A"(.*)"\z/$1/ms)
408 4 141 if $args =~ /\G(.+)\z/cgms
417 22 3 if (@tokens) { }
1 2 elsif (/\S/ms) { }