App-Sqitch
view release on metacpan or search on metacpan
lib/App/Sqitch/Command/target.pm view on Meta::CPAN
q{Cannot rename target "{target}" because it's referenced by: {engines}},
target => $old,
engines => join ', ', @deps
);
}
$self->_rename($old, $new);
}
sub _dependencies {
my ($self, $name) = @_;
my %depends = $self->sqitch->config->get_regexp(
key => qr/^(?:core|engine[.][^.]+)[.]target$/
);
return grep { $depends{$_} eq $name } sort keys %depends;
}
sub _rename {
my ($self, $old, $new) = @_;
my $config = $self->sqitch->config;
try {
$config->rename_section(
from => "target.$old",
($new ? (to => "target.$new") : ()),
filename => $config->local_file,
);
} catch {
die $_ unless /No such section/;
hurl target => __x(
'Unknown target "{target}"',
target => $old,
);
};
try {
$config->rename_section(
from => "target.$old.variables",
($new ? (to => "target.$new.variables") : ()),
filename => $config->local_file,
);
} catch {
die $_ unless /No such section/;
};
return $self;
}
sub show {
my ($self, @names) = @_;
return $self->list unless @names;
my $sqitch = $self->sqitch;
my $config = $sqitch->config;
my %label_for = (
uri => __('URI'),
registry => __('Registry'),
client => __('Client'),
top_dir => __('Top Directory'),
plan_file => __('Plan File'),
extension => __('Extension'),
revert => ' ' . __ 'Revert',
deploy => ' ' . __ 'Deploy',
verify => ' ' . __ 'Verify',
reworked => ' ' . __ 'Reworked',
);
my $len = max map { length } values %label_for;
$_ .= ': ' . ' ' x ($len - length $_) for values %label_for;
# Header labels.
$label_for{script_dirs} = __('Script Directories') . ':';
$label_for{reworked_dirs} = __('Reworked Script Directories') . ':';
$label_for{variables} = __('Variables') . ':';
$label_for{no_variables} = __('No Variables');
require App::Sqitch::Target;
for my $name (@names) {
my $target = App::Sqitch::Target->new(
$self->target_params,
name => $name,
);
$self->emit("* $name");
$self->emit(' ', $label_for{uri}, $target->uri->as_string);
$self->emit(' ', $label_for{registry}, $target->registry);
$self->emit(' ', $label_for{client}, $target->client);
$self->emit(' ', $label_for{top_dir}, $target->top_dir);
$self->emit(' ', $label_for{plan_file}, $target->plan_file);
$self->emit(' ', $label_for{extension}, $target->extension);
$self->emit(' ', $label_for{script_dirs});
$self->emit(' ', $label_for{deploy}, $target->deploy_dir);
$self->emit(' ', $label_for{revert}, $target->revert_dir);
$self->emit(' ', $label_for{verify}, $target->verify_dir);
$self->emit(' ', $label_for{reworked_dirs});
$self->emit(' ', $label_for{reworked}, $target->reworked_dir);
$self->emit(' ', $label_for{deploy}, $target->reworked_deploy_dir);
$self->emit(' ', $label_for{revert}, $target->reworked_revert_dir);
$self->emit(' ', $label_for{verify}, $target->reworked_verify_dir);
my $vars = $target->variables;
if (%{ $vars }) {
my $len = max map { length } keys %{ $vars };
$self->emit(' ', $label_for{variables});
$self->emit(" $_: " . (' ' x ($len - length $_)) . $vars->{$_})
for sort { lc $a cmp lc $b } keys %{ $vars };
} else {
$self->emit(' ', $label_for{no_variables});
}
}
return $self;
}
1;
__END__
=head1 Name
App::Sqitch::Command::target - Add, modify, or list Sqitch target databases
=head1 Synopsis
my $cmd = App::Sqitch::Command::target->new(%params);
$cmd->execute;
=head1 Description
Manages Sqitch targets, which are stored in the local configuration file.
=head1 Interface
=head3 Class Methods
=head3 C<extra_target_keys>
Returns a list of additional option keys to be specified via options.
=head2 Instance Methods
=head2 Attributes
=head3 C<properties>
Hash of property values to set.
=head3 C<verbose>
Verbosity.
=head3 C<execute>
$target->execute($command);
Executes the C<target> command.
=head3 C<add>
Implements the C<add> action.
( run in 1.065 second using v1.01-cache-2.11-cpan-5a3173703d6 )