App-Sqitch
view release on metacpan or search on metacpan
lib/App/Sqitch/Role/TargetConfigCommand.pm view on Meta::CPAN
$self->info(__x(
'Created {file}',
file => "$dir$sep"
)) if make_path $dir, { error => \my $err };
if ( my $diag = shift @{ $err } ) {
my ( $path, $msg ) = %{ $diag };
hurl $self->command => __x(
'Error creating {path}: {error}',
path => $path,
error => $msg,
) if $path;
hurl $self->command => $msg;
}
}
return $self;
}
sub write_plan {
my ( $self, %p ) = @_;
my $project = $p{project};
my $uri = $p{uri};
my $target = $p{target} || $self->config_target;
my $file = $target->plan_file;
unless ($project && $uri) {
# Find a plan to copy the project name and URI from.
my $conf_plan = $target->plan;
my $def_plan = $self->default_target->plan;
if (try { $def_plan->project }) {
$project ||= $def_plan->project;
$uri ||= $def_plan->uri;
} elsif (try { $conf_plan->project }) {
$project ||= $conf_plan->project;
$uri ||= $conf_plan->uri;
} else {
hurl $self->command => __x(
'Missing %project pragma in {file}',
file => $file,
) unless $project;
}
}
if (-e $file) {
hurl init => __x(
'Cannot initialize because {file} already exists and is not a file',
file => $file,
) unless -f $file;
# Try to load the plan file.
my $plan = App::Sqitch::Plan->new(
sqitch => $self->sqitch,
file => $file,
target => $target,
);
my $file_proj = try { $plan->project } or hurl init => __x(
'Cannot initialize because {file} already exists and is not a valid plan file',
file => $file,
);
# Bail if this plan file looks like it's for a different project.
hurl init => __x(
'Cannot initialize because project "{project}" already initialized in {file}',
project => $plan->project,
file => $file,
) if $plan->project ne $project;
return $self;
}
$self->mkdirs( $file->dir ) unless -d $file->dir;
my $fh = $file->open('>:utf8_strict') or hurl init => __x(
'Cannot open {file}: {error}',
file => $file,
error => $!,
);
require App::Sqitch::Plan;
$fh->print(
'%syntax-version=', App::Sqitch::Plan::SYNTAX_VERSION(), "\n",
'%project=', "$project\n",
( $uri ? ('%uri=', $uri->canonical, "\n") : () ), "\n",
);
$fh->close or hurl add => __x(
'Error closing {file}: {error}',
file => $file,
error => $!
);
$self->sqitch->info( __x 'Created {file}', file => $file );
return $self;
}
sub config_params {
my ($self, $key) = @_;
my @vars;
while (my ($prop, $val) = each %{ $self->properties } ) {
if (ref $val eq 'HASH') {
push @vars => map {{
key => "$key.$prop.$_",
value => $val->{$_},
}} keys %{ $val };
} else {
push @vars => {
key => "$key.$prop",
value => $val,
};
}
}
return \@vars;
}
1;
__END__
=head1 Name
App::Sqitch::Role::TargetConfigCommand - A command that handles target-related configuration
=head1 Synopsis
( run in 1.090 second using v1.01-cache-2.11-cpan-39bf76dae61 )