### ### Copyright 2000-2007 University of Illinois Board of Trustees ### All rights reserved. ### ### PSGConf::Action::UntarFile - canned untar action type for psgconf ### ### Campus Information Technologies and Educational Services ### University of Illinois at Urbana-Champaign ### package PSGConf::Action::UntarFile; use strict; use PSGConf::Action; use PSGConf::Util; our @ISA = qw(PSGConf::Action); ############################################################################### ### internal routine so I do not have to duplicate code... ############################################################################### sub _generate_cmd { my ($self, $psgconf) = @_; my ($cmdstr); $cmdstr = $self->{tar_cmd} . ' -C ' . $self->{name}; if ( $psgconf->{verbose} ) { $cmdstr .= ' -xvpf - '; } else { $cmdstr .= ' -xpf - '; } if (exists $self->{user} && $self->{user} ne 'root') { $cmdstr = 'su ' . $self->{user} . ' -c ' . qq("$cmdstr"); } if (exists $self->{uncompress_cmd}) { $cmdstr = $self->{uncompress_cmd} . ' < ' . $self->{tarball} . ' | ' . $cmdstr; } else { $cmdstr = '/bin/cat ' . $self->{tarball} . ' | ' . $cmdstr; } return $cmdstr; } ############################################################################### ### check method ############################################################################### sub check { my ($self, $psgconf) = @_; $self->{changed} = 1; return 1; } ############################################################################### ### do method ############################################################################### sub do { my ($self, $psgconf) = @_; my ($cmdstr) = $self->_generate_cmd($psgconf); if (&PSGConf::Util::RunCommand($cmdstr, 1)) { warn "\n\t!!! can't untar file (" . $self->{tarball} . ") in " . $self->{name} . "\n"; return 0; } unlink "$self->{tarball}" if (exists $self->{delete} && $self->{delete} && exists $psgconf->{rm_tmpfiles} && $psgconf->{rm_tmpfiles}); } ############################################################################### ### diff method ############################################################################### sub diff { my ($self, $psgconf) = @_; my ($cmdstr) = $self->_generate_cmd($psgconf); print "###############################################################################\n"; print "### DIFF FOR $self->{name}\n"; print "###############################################################################\n"; print "+ $cmdstr\n"; print "+ unlink \"$self->{tarball}\"\n" if ($self->{delete}); print "\n"; } ############################################################################### ### documentation ############################################################################### 1; __END__ =head1 NAME PSGConf::Action::UntarFile - file untar action class for PSGConf =head1 SYNOPSIS use PSGConf::Action::UntarFile; $psgconf->register_actions( PSGConf::Action::UntarFile->new( 'name' => '/path/to/directory', 'user' => login to run the tar command as, 'tar_cmd' => '/path/to/tar', 'tarball' => '/path/to/tarball', 'uncompress_cmd' => '/path/to/uncompress', 'delete' => [0,1] 1 if the tarball should be deleted after the operation ), ... ); =head1 DESCRIPTION The B module provides a B action class for untarring a tape archive file The B class is derived from the B class, but it defines/overrides the following methods: =over 4 =item check() Verifies that the tarball exists and is a valid tape archive. =item diff() Prints a diff message for the directory that is to be updated =item do() Untars the file into the specified directory, then deletes the tar file if necessary. =back In addition to the attributes supported by the B class, the B class supports the following attributes: =over 4 =item I The name of the directory where the tar file is to be extracted. =item I The tar file to be extracted. =item I 1 if the tar file is compressed (gziped), 0 if it is uncompressed. =item I 1 if the tar file is to be deleted after the extraction. =back =head1 SEE ALSO L L L =cut