Rex
view release on metacpan or search on metacpan
lib/Rex/Commands/Pkg.pm view on Meta::CPAN
my ( $new_md5, $old_md5 ) = ( "", "" );
if ( $source =~ m/\.tpl$/ ) {
# das ist ein template
my $content = eval { local ( @ARGV, $/ ) = ($source); <>; };
my $vars = $option->{"template"};
my %merge1 = %{ $vars || {} };
my %merge2 = Rex::Hardware->get(qw/ All /);
my %template_vars = ( %merge1, %merge2 );
if ($need_md5) {
eval { $old_md5 = md5($package); };
}
my $fh = file_write($package);
$fh->write(
Rex::Config->get_template_function()->( $content, \%template_vars ) );
$fh->close;
if ($need_md5) {
eval { $new_md5 = md5($package); };
}
}
else {
my $source = Rex::Helper::Path::get_file_path( $source, caller() );
my $content = eval { local ( @ARGV, $/ ) = ($source); <>; };
my $local_md5 = "";
if ( $option->{force} ) {
upload $source, $package;
}
else {
eval {
$old_md5 = md5($package);
chomp $old_md5;
};
LOCAL {
$local_md5 = md5($source);
};
unless ( $local_md5 eq $old_md5 ) {
Rex::Logger::debug(
"MD5 is different $local_md5 -> $old_md5 (uploading)");
upload $source, $package;
}
else {
Rex::Logger::debug("MD5 is equal. Not uploading $source -> $package");
}
eval { $new_md5 = md5($package); };
}
}
if ( exists $option->{"owner"} ) {
chown $option->{"owner"}, $package;
}
if ( exists $option->{"group"} ) {
chgrp $option->{"group"}, $package;
}
if ( exists $option->{"mode"} ) {
chmod $option->{"mode"}, $package;
}
if ($need_md5) {
unless ( $old_md5 && $new_md5 && $old_md5 eq $new_md5 ) {
$old_md5 ||= "";
$new_md5 ||= "";
Rex::Logger::debug(
"File $package has been changed... Running on_change");
Rex::Logger::debug("old: $old_md5");
Rex::Logger::debug("new: $new_md5");
&$on_change;
}
}
}
elsif ( $type eq "package" ) {
if ( ref( $_[0] ) eq "HASH" ) {
$option = shift;
}
elsif ( $_[0] ) {
$option = {@_};
}
my $pkg;
$pkg = Rex::Pkg->get;
if ( !ref($package) ) {
$package = [$package];
}
my $changed = 0;
# if we're being asked to install a single package
if ( @{$package} == 1 ) {
my $pkg_to_install = shift @{$package};
unless ( $pkg->is_installed( $pkg_to_install, $option ) ) {
Rex::Logger::info("Installing $pkg_to_install.");
#### check and run before_change hook
Rex::Hook::run_hook( install => "before_change", @orig_params );
##############################
$pkg->install( $pkg_to_install, $option );
$changed = 1;
#### check and run after_change hook
Rex::Hook::run_hook(
( run in 0.323 second using v1.01-cache-2.11-cpan-5511b514fd6 )