SVN-Deploy
view release on metacpan or search on metacpan
lib/SVN/Deploy.pm view on Meta::CPAN
}
# running post actions
($ret, $output)
= $self->_run_scripts(
$props->{$args{target}}{post},
$self->{tempdir},
$props->{$args{target}}{dest},
);
if ( $ret ) {
$self->{lasterr} = "post had errors, output:$output";
return;
}
$self->{output} .= "POST_OUTPUT:\n" . $output;
$self->_hist_add(%args, action => 'deploy end')
or return;
return(1);
}
=head3 get_methods
$obj->get_methods();
Returns a reference to a hash with all available method names as keys
and a hashref for the parameters as values. The parameter hashes have
the parameters as keys and the value will consist of 'm' for mandatory
and 'o' for optional parameters.
=cut
sub get_methods { return(dclone(\%arg_check)) }
=head3 lasterr
$obj->lasterr();
Returns the text error message for the last encountered error.
=cut
sub lasterr { return($_[0]->{lasterr} || '') }
=head3 output
$obj->output();
Returns the output from external scripts after a call to
$obj->build_version() or $obj->deploy_version.
=cut
sub output { return($_[0]->{output} || '') }
# relocated check for product_* methods
sub _product_args_check {
my $self = shift;
my %args = @_;
my $root_href = $self->_svn('ls', $self->{repo}, 'HEAD', 0)
or return;
unless ( exists($root_href->{$args{category}}) ) {
$self->{lasterr} = "Category $args{category} does not exist";
return;
}
return(1) unless $args{cfg};
# source is mandatory
unless (
$args{cfg}{source} and ref($args{cfg}{source}) eq 'ARRAY'
and @{ $args{cfg}{source} }
) {
$self->{lasterr} = "no source specified";
return;
}
# optional build scripts
if (
exists($args{cfg}{build})
and ref($args{cfg}{build}) ne 'ARRAY'
) {
$self->{lasterr}
= "parameter 'build' must contain an array ref";
return;
}
for my $env (qw/qa prod/) {
for my $key (qw/dest pre post/) {
if (
exists($args{cfg}{$env}{$key})
and ref($args{cfg}{$env}{$key}) ne 'ARRAY'
) {
$self->{lasterr}
= "$env: parameter '$key' must contain an array ref";
return;
}
}
if (
exists($args{cfg}{$env}{dest})
and @{ $args{cfg}{$env}{dest} } )
{
if ( @{ $args{cfg}{$env}{dest} } < @{ $args{cfg}{source} } ) {
$self->{lasterr}
= "$env: destination for one ore more sources missing";
return;
}
}
}
return(1);
}
# relocated set function for product_* methods
sub _product_set_params {
my $self = shift;
my %args = @_;
my $prod_tmp = catdir(
$self->{tempdir},
join('-', $args{category}, $args{product}, 'props'),
);
if ( -e $prod_tmp ) {
_log "updating $prod_tmp";
$self->_svn('update', $prod_tmp, 'HEAD', 0)
or return;
} else {
_log "checking out '$args{prod_url}' to $prod_tmp";
$self->_svn('checkout', $args{prod_url}, $prod_tmp, 'HEAD', 0)
or return;
}
my $dir_save = getcwd();
chdir($prod_tmp);
for my $param ( qw/build source/ ) {
next unless $args{cfg}{$param};
$self->_svn(
'propset',
$param,
join("\n", @{ $args{cfg}{$param} }),
$prod_tmp,
0,
) or return;
}
for my $env (qw/qa prod/) {
for my $key (qw/dest pre post/) {
if ( $args{cfg}{$env}{$key} ) {
$self->_svn(
'propset',
"${env}_$key",
join("\n", @{ $args{cfg}{$env}{$key} }),
$prod_tmp,
0,
) or return;
}
}
}
_log "committing property changes";
$self->_svn('commit', $prod_tmp, 0) or return;
chdir($dir_save);
return(1);
}
=head3 product_add
my %cfg = (
build => [
( run in 0.756 second using v1.01-cache-2.11-cpan-5511b514fd6 )