| line | true | false | branch | 
 
| 164 | 1 | 142 | unless my $target = $p->{'target'} | 
 
| 167 | 1 | 141 | unless my $ekey = $target->engine_key | 
 
| 172 | 2 | 139 | unless eval "require $pkg" | 
 
| 180 | 1 | 5 | if $class eq "App::Sqitch::Engine" | 
 
| 201 | 8 | 0 | if $@ | 
 
| 217 | 1 | 12 | if $to_index < 0 | 
 
| 219 | 8 | 4 | if (defined $to) | 
 
| 226 | 1 | 6 | if ($to_index == $position) | 
 
| 235 | 1 | 9 | if ($position == $to_index) { } | 
 
|  | 7 | 2 | elsif ($position == -1) { } | 
 
| 242 | 3 | 4 | if ($self->initialized) { } | 
 
| 255 | 1 | 1 | if $to_index < $position | 
 
| 261 | 5 | 3 | defined $to ? : | 
 
| 282 | 3 | 1 | $mode eq 'all' ? : | 
 
|  | 2 | 4 | $mode eq 'tag' ? : | 
 
|  | 2 | 6 | $mode eq 'change' ? : | 
 
| 312 | 14 | 1 | if (defined $prompt) { } | 
 
| 313 | 0 | 14 | unless defined $prompt_default | 
 
| 334 | 7 | 7 | if (defined $to) { } | 
 
| 337 | 3 | 4 | unless (my($change) = $self->_load_changes($self->change_for_key($to))) | 
 
| 339 | 1 | 2 | if ($plan->find($to)) | 
 
| 357 | 1 | 3 | unless (@changes = $self->deployed_changes_since($self->_load_changes($change))) | 
 
| 367 | 2 | 1 | if ($prompt) { } | 
 
| 378 | 1 | 1 | unless $sqitch->ask_yes_no(&__x("Revert changes to {change} from {destination}?", "change", $change->format_name_with_tags, "destination", $self->destination), $prompt_default) | 
 
| 391 | 3 | 4 | unless (@changes = $self->deployed_changes) | 
 
| 398 | 3 | 1 | if ($prompt) { } | 
 
| 408 | 1 | 2 | unless $sqitch->ask_yes_no(&__x("Revert all changes from {destination}?", "destination", $self->destination), $prompt_default) | 
 
| 451 | 2 | 6 | unless (@changes) | 
 
| 452 | 1 | 1 | $plan->count ? : | 
 
| 459 | 1 | 5 | if ($plan->count == 0) | 
 
| 469 | 1 | 4 | if (my $count = $self->_verify_changes($from_idx, $to_idx, !$to, @changes)) | 
 
| 473 | 0 | 1 | if @changes > $num_changes | 
 
| 491 | 8 | 3 | unless defined $from | 
 
| 498 | 3 | 9 | if defined $to | 
 
| 499 | 1 | 8 | if (my $id = $self->latest_change_id) | 
 
| 528 | 9 | 7 | if ($pop) { } | 
 
| 564 | 20 | 1 | if (defined $plan_index) { } | 
 
| 566 | 4 | 16 | if ($plan_index != $from_idx + $i) | 
 
| 581 | 19 | 2 | unless $reworked | 
 
| 584 | 7 | 14 | $errs ? : | 
 
| 590 | 14 | 2 | if defined &first(sub { | 
 
| 603 | 1 | 13 | if ($pending and $to_idx < $plan->count - 1) | 
 
| 604 | 1 | 0 | if (my(@pending) = map({$plan->change_at($_);} $to_idx + 1 .. $plan->count - 1)) | 
 
| 623 | 11 | 9 | if (-e $file) | 
 
| 661 | 7 | 2 | unless $seen{$_->id // ""} | 
 
| 666 | 2 | 8 | if (my $req = $seen{$_->id // ''}) { } | 
 
| 675 | 5 | 3 | if (@conflicts or @required) | 
 
| 680 | 4 | 1 | if @conflicts = &$listof(@conflicts) | 
 
| 687 | 2 | 3 | if @required = &$listof(@required) | 
 
| 698 | 1 | 2 | if (my(@ids) = $self->are_deployed_changes(@changes)) | 
 
| 718 | 1 | 4 | unless my(@requiring) = grep({not $seen{$_->{'change_id'}};} $self->changes_requiring_change($change)) | 
 
| 730 | 3 | 3 | $_->{'project'} eq $proj ? : | 
 
| 735 | 3 | 1 | if @msg | 
 
| 745 | 1 | 16 | unless defined $dep->id or defined $dep->change or defined $dep->tag | 
 
| 768 | 7 | 19 | if $tag | 
 
| 769 | 2 | 17 | if $cname =~ /^[0-9a-f]{40}$/ | 
 
| 770 | 2 | 15 | if $cname eq "HEAD" or $cname eq "ROOT" | 
 
| 820 | 1 | 44 | unless $params | 
 
| 829 | 5 | 39 | if (defined(my $prev_idx = $seen{$params->{'name'}})) | 
 
| 841 | 2 | 42 | if (defined(my $reworked_idx = eval { | 
 
| 877 | 0 | 1 | if @{$ids;} <= 1 | 
 
| 890 | 0 | 2 | if (my $change = $plan->find($id)) { } | 
 
| 915 | 10 | 0 | if (my(@run) = reverse(@_)) | 
 
| 916 | 3 | 7 | $tagged ? : | 
 
| 917 | 6 | 4 | $tagged ? : | 
 
| 943 | 8 | 14 | if ($change->tags) | 
 
| 949 | 4 | 1 | if (my $ident = eval { | 
 
| 950 | 2 | 2 | unless $ident eq "private" | 
 
| 971 | 4 | 1 | if (my $ident = &try(sub { | 
 
| 972 | 2 | 2 | unless $ident eq "private" | 
 
| 986 | 1 | 20 | if ($self->_no_registry) { } | 
 
|  | 8 | 12 | elsif (my $state = $self->current_state) { } | 
 
| 993 | 0 | 0 | unless $state->{'tags'} | 
 
| 998 | 1 | 7 | unless (exists $state->{'script_hash'}) | 
 
| 1007 | 3 | 5 | if $state->{'script_hash'} and $state->{'script_hash'} eq $state->{'change_id'} | 
 
| 1011 | 7 | 1 | if (my(@tags) = $change->tags) { } | 
 
| 1026 | 1 | 1 | $thing->isa('App::Sqitch::Plan::Tag') ? : | 
 
| 1042 | 58 | 16 | unless $self->log_only | 
 
| 1044 | 5 | 61 | if $self->with_verify | 
 
| 1057 | 6 | 3 | unless $self->log_only | 
 
| 1085 | 30 | 10 | unless $self->log_only | 
 
| 1107 | 1 | 3 | if $self->_locked | 
 
| 1108 | 1 | 2 | if $self->try_lock | 
 
| 1119 | 1 | 1 | if $self->wait_lock | 
 
| 1139 | 0 | 0 | if (my $ret = &$code()) | 
 
| 1143 | 0 | 0 | if $secs < 0 | 
 
| 1179 | 31 | 5 | if $newver == $oldver | 
 
| 1181 | 3 | 2 | if $oldver == 0 and not $self->initialized | 
 
| 1186 | 1 | 1 | if $newver < $oldver | 
 
| 1192 | 1 | 0 | if $newver > $oldver | 
 
| 1201 | 0 | 0 | unless $self->needs_upgrade | 
 
| 1207 | 0 | 0 | if $newver < $oldver | 
 
| 1222 | 0 | 0 | unless @scripts and $scripts[-1][0] == $newver | 
 
| 1256 | 5 | 4 | if $i + $from_idx >= $plan->count or $change->script_hash ne $plan->change_at($i + $from_idx)->script_hash | 
 
| 1268 | 0 | 1 | if $divergent_idx == -1 | 
 
| 1269 | 0 | 1 | if $divergent_idx == 0 | 
 
| 1286 | 2 | 6 | unless (@deployed_changes) | 
 
| 1287 | 1 | 1 | $plan->count ? : | 
 
| 1299 | 4 | 2 | if ($divergent_change_idx != -1) | 
 
| 1308 | 4 | 2 | if $num_failed | 
 
| 1324 | 0 | 4 | if $_[0]->_no_registry | 
 
| 1335 | 0 | 0 | unless $self->_initialize |