# $Id: Install.pm 867 2006-04-11 20:34:56Z guillomovitch $ package Youri::Upload::Action::Send; =head1 NAME Youri::Upload::Action::Install - Package installation =head1 DESCRIPTION This action plugin ensures installation of new package revisions. =cut use warnings; use strict; use Carp; use base qw/Youri::Upload::Action/; sub _init { my $self = shift; my %options = ( perms => 644, uphost => '', user => '', ssh_key => '', verbose => '', @_ ); croak "undefined upload host" unless $options{uphost}; croak "undefined ssh key" unless $options{ssh_key}; $self->{_perms} = $options{perms}; $self->{_user} = $options{user}; $self->{_uphost} = $options{uphost}; $self->{_ssh_key} = $options{ssh_key}; $self->{_verbose} = $options{verbose}; return $self; } sub run { my ($self, $package, $repository, $target, $define) = @_; croak "Not a class method" unless ref $self; my $file = $package->get_file(); my $dest = $repository->get_upload_dir($package, $target, $define); print "Sending file $file to $dest\n" if $self->{_verbose}; my ($base) = $file =~ /.*\/(?:@\d+:)?([^\/]*)/; my $cmd = "scp -i $self->{_ssh_key} $file $self->{_user}\@$self->{_uphost}:/$dest$base.new"; my $cmd2 = "ssh -i $self->{_ssh_key} $self->{_user}\@$self->{_uphost} \"mv /$dest$base.new /$dest$base\""; print "Upload::Action::Send: doing $cmd\n$cmd2\n" if 1 || $self->{_verbose}; if (!$self->{_test}) { if (!system($cmd)) { if (!system($cmd2)) { print "Upload::Action::Send: upload succeeded!\n"; return 1 } } print "Upload::Action::Send: upload failed!\n"; } } =head1 COPYRIGHT AND LICENSE Copyright (C) 2002-2006, YOURI project This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;