| line | true | false | branch | 
 
| 144 | 1 | 138 | unless my $target = $p->{'target'} | 
 
| 147 | 1 | 137 | unless my $ekey = $target->engine_key | 
 
| 152 | 2 | 135 | unless eval "require $pkg" | 
 
| 160 | 1 | 5 | if $class eq "App::Sqitch::Engine" | 
 
| 181 | 8 | 0 | if $@ | 
 
| 197 | 1 | 12 | if $to_index < 0 | 
 
| 199 | 8 | 4 | if (defined $to) | 
 
| 206 | 1 | 6 | if ($to_index == $position) | 
 
| 215 | 1 | 9 | if ($position == $to_index) { } | 
 
|  | 7 | 2 | elsif ($position == -1) { } | 
 
| 222 | 3 | 4 | if ($self->initialized) { } | 
 
| 235 | 1 | 1 | if $to_index < $position | 
 
| 241 | 5 | 3 | defined $to ? : | 
 
| 257 | 3 | 1 | $mode eq 'all' ? : | 
 
|  | 2 | 4 | $mode eq 'tag' ? : | 
 
|  | 2 | 6 | $mode eq 'change' ? : | 
 
| 283 | 7 | 6 | if (defined $to) { } | 
 
| 286 | 3 | 4 | unless (my($change) = $self->_load_changes($self->change_for_key($to))) | 
 
| 288 | 1 | 2 | if ($plan->find($to)) | 
 
| 304 | 1 | 3 | unless (@changes = $self->deployed_changes_since($self->_load_changes($change))) | 
 
| 312 | 1 | 2 | if ($self->no_prompt) { } | 
 
| 319 | 1 | 1 | unless $sqitch->ask_yes_no(&__x("Revert changes to {change} from {destination}?", "change", $change->format_name_with_tags, "destination", $self->destination), $self->prompt_accept) | 
 
| 331 | 2 | 4 | unless (@changes = $self->deployed_changes) | 
 
| 336 | 1 | 3 | if ($self->no_prompt) { } | 
 
| 342 | 1 | 2 | unless $sqitch->ask_yes_no(&__x("Revert all changes from {destination}?", "destination", $self->destination), $self->prompt_accept) | 
 
| 382 | 2 | 6 | unless (@changes) | 
 
| 383 | 1 | 1 | $plan->count ? : | 
 
| 390 | 1 | 5 | if ($plan->count == 0) | 
 
| 400 | 1 | 4 | if (my $count = $self->_verify_changes($from_idx, $to_idx, !$to, @changes)) | 
 
| 404 | 0 | 1 | if @changes > $num_changes | 
 
| 422 | 8 | 3 | unless defined $from | 
 
| 429 | 3 | 9 | if defined $to | 
 
| 430 | 1 | 8 | if (my $id = $self->latest_change_id) | 
 
| 459 | 9 | 7 | if ($pop) { } | 
 
| 495 | 20 | 1 | if (defined $plan_index) { } | 
 
| 497 | 4 | 16 | if ($plan_index != $from_idx + $i) | 
 
| 512 | 19 | 2 | unless $reworked | 
 
| 515 | 7 | 14 | $errs ? : | 
 
| 521 | 14 | 2 | if defined &first(sub { | 
 
| 534 | 1 | 13 | if ($pending and $to_idx < $plan->count - 1) | 
 
| 535 | 1 | 0 | if (my(@pending) = map({$plan->change_at($_);} $to_idx + 1 .. $plan->count - 1)) | 
 
| 554 | 11 | 9 | if (-e $file) | 
 
| 592 | 7 | 2 | unless $seen{$_->id // ""} | 
 
| 597 | 2 | 8 | if (my $req = $seen{$_->id // ''}) { } | 
 
| 606 | 5 | 3 | if (@conflicts or @required) | 
 
| 611 | 4 | 1 | if @conflicts = &$listof(@conflicts) | 
 
| 618 | 2 | 3 | if @required = &$listof(@required) | 
 
| 629 | 1 | 2 | if (my(@ids) = $self->are_deployed_changes(@changes)) | 
 
| 649 | 1 | 4 | unless my(@requiring) = grep({not $seen{$_->{'change_id'}};} $self->changes_requiring_change($change)) | 
 
| 661 | 3 | 3 | $_->{'project'} eq $proj ? : | 
 
| 666 | 3 | 1 | if @msg | 
 
| 676 | 1 | 16 | unless defined $dep->id or defined $dep->change or defined $dep->tag | 
 
| 699 | 7 | 19 | if $tag | 
 
| 700 | 2 | 17 | if $cname =~ /^[0-9a-f]{40}$/ | 
 
| 701 | 2 | 15 | if $cname eq "HEAD" or $cname eq "ROOT" | 
 
| 751 | 1 | 44 | unless $params | 
 
| 760 | 5 | 39 | if (defined(my $prev_idx = $seen{$params->{'name'}})) | 
 
| 772 | 2 | 42 | if (defined(my $reworked_idx = eval { | 
 
| 808 | 0 | 1 | if @{$ids;} <= 1 | 
 
| 821 | 0 | 2 | if (my $change = $plan->find($id)) { } | 
 
| 846 | 10 | 0 | if (my(@run) = reverse(@_)) | 
 
| 847 | 3 | 7 | $tagged ? : | 
 
| 848 | 6 | 4 | $tagged ? : | 
 
| 874 | 8 | 14 | if ($change->tags) | 
 
| 880 | 4 | 1 | if (my $ident = eval { | 
 
| 881 | 2 | 2 | unless $ident eq "private" | 
 
| 902 | 4 | 1 | if (my $ident = &try(sub { | 
 
| 903 | 2 | 2 | unless $ident eq "private" | 
 
| 917 | 8 | 12 | if (my $state = $self->current_state) { } | 
 
| 921 | 0 | 0 | unless $state->{'tags'} | 
 
| 926 | 1 | 7 | unless (exists $state->{'script_hash'}) | 
 
| 935 | 3 | 5 | if $state->{'script_hash'} and $state->{'script_hash'} eq $state->{'change_id'} | 
 
| 939 | 7 | 1 | if (my(@tags) = $change->tags) { } | 
 
| 954 | 1 | 1 | $thing->isa('App::Sqitch::Plan::Tag') ? : | 
 
| 970 | 58 | 16 | unless $self->log_only | 
 
| 972 | 5 | 61 | if $self->with_verify | 
 
| 985 | 6 | 3 | unless $self->log_only | 
 
| 1013 | 30 | 10 | unless $self->log_only | 
 
| 1035 | 1 | 3 | if $self->_locked | 
 
| 1036 | 1 | 2 | if $self->try_lock | 
 
| 1047 | 1 | 1 | if $self->wait_lock | 
 
| 1067 | 0 | 0 | if (my $ret = &$code()) | 
 
| 1071 | 0 | 0 | if $secs < 0 | 
 
| 1107 | 30 | 5 | if $newver == $oldver | 
 
| 1109 | 3 | 2 | if $oldver == 0 and not $self->initialized | 
 
| 1114 | 1 | 1 | if $newver < $oldver | 
 
| 1120 | 1 | 0 | if $newver > $oldver | 
 
| 1129 | 0 | 0 | unless $self->needs_upgrade | 
 
| 1135 | 0 | 0 | if $newver < $oldver | 
 
| 1150 | 0 | 0 | unless @scripts and $scripts[-1][0] == $newver | 
 
| 1184 | 5 | 4 | if $i + $from_idx >= $plan->count or $change->script_hash ne $plan->change_at($i + $from_idx)->script_hash | 
 
| 1196 | 0 | 1 | if $divergent_idx == -1 | 
 
| 1197 | 0 | 1 | if $divergent_idx == 0 | 
 
| 1214 | 2 | 6 | unless (@deployed_changes) | 
 
| 1215 | 1 | 1 | $plan->count ? : | 
 
| 1227 | 4 | 2 | if ($divergent_change_idx != -1) | 
 
| 1236 | 4 | 2 | if $num_failed |