AFS-Command
view release on metacpan or search on metacpan
lib/AFS/Command/Base.pm view on Meta::CPAN
my $self = shift;
$self->{errors} = "";
while ( defined($_ = $self->{handle}->getline()) ) {
$self->{errors} .= time2str("[%Y-%m-%d %H:%M:%S] ",time,'GMT') if $self->{timestamps};
$self->{errors} .= $_;
}
return 1;
}
sub _reap_cmds {
my $self = shift;
my (%args) = @_;
my $errors = 0;
$self->{handle}->close() || do {
$self->_Carp("Unable to close pipe handle: $ERRNO");
$errors++;
};
delete $self->{handle};
delete $self->{cmds};
$self->{status} = {};
my %allowstatus = ();
if ( $args{allowstatus} ) {
if ( ref $args{allowstatus} eq 'ARRAY' ) {
foreach my $status ( @{$args{allowstatus}} ) {
$allowstatus{$status}++;
}
} else {
$allowstatus{$args{allowstatus}}++;
}
}
foreach my $pid ( keys %{$self->{pids}} ) {
$self->{status}->{$pid}->{cmd} =
join(' ', @{delete $self->{pids}->{$pid}} );
if ( waitpid($pid,0) ) {
$self->{status}->{$pid}->{status} = $?;
if ( $? ) {
if ( %allowstatus ) {
$errors++ unless $allowstatus{$? >> 8};
} else {
$errors++;
}
}
} else {
$self->{status}->{$pid}->{status} = undef;
$errors++;
}
}
return if $errors;
return 1;
}
sub AUTOLOAD {
my $self = shift;
my (%args) = @_;
$self->{operation} = $AUTOLOAD;
$self->{operation} =~ s/.*:://;
return unless $self->_parse_arguments(%args);
return unless $self->_exec_cmds( stderr => 'stdout' );
my $errors = 0;
$errors++ unless $self->_parse_output();
$errors++ unless $self->_reap_cmds();
return if $errors;
return 1;
}
sub DESTROY {}
1;
( run in 1.235 second using v1.01-cache-2.11-cpan-d80b1682f3f )