CPANPLUS
view release on metacpan or search on metacpan
0.052 Wed Feb 9 18:44:13 CET 2005
* Make auto-installation work (with some guess work) if
$ENV{PERL_MM_USE_DEFAULT} is set.
* Setup decent defaults for the callbacks, so scripts
don't have to set them unless they want actual callback
behaviour (This helps ExtUtils::AutoInstall greatly).
* chmod() extracted files to 755 so we do not get permission
denied errors when trying to remove them or copy over them
if they were not +w for the user.
* Don't use sudo, even if it's configured, if the user is
root already.
* Default to 'prefer binary programs' if Compress::Zlib is
not installed.
* Make 'parse_module' deal better with paths that have sub
directories in them.
* Make 'parse_module' deal better with version numbers
that have letters in them.
inc/bundle/Archive/Tar.pm view on Meta::CPAN
$tar->read('origin.tgz');
$tar->extract();
$tar->add_files('file/foo.pl', 'docs/README');
$tar->add_data('file/baz.txt', 'This is the contents now');
$tar->rename('oldname', 'new/file/name');
$tar->chown('/', 'root');
$tar->chown('/', 'root:root');
$tar->chmod('/tmp', '1777');
$tar->write('files.tar'); # plain tar
$tar->write('files.tgz', COMPRESS_GZIP); # gzip compressed
$tar->write('files.tbz', COMPRESS_BZIP); # bzip2 compressed
$tar->write('files.txz', COMPRESS_XZ); # xz compressed
=head1 DESCRIPTION
Archive::Tar provides an object oriented mechanism for handling tar
files. It provides class methods for quick and easy files handling
inc/bundle/Archive/Tar.pm view on Meta::CPAN
if( not -l $full ) {
utime time, $entry->mtime - TIME_OFFSET, $full or
$self->_error( qq[Could not update timestamp] );
}
if( $CHOWN && CAN_CHOWN->() and not -l $full ) {
CORE::chown( $entry->uid, $entry->gid, $full ) or
$self->_error( qq[Could not set uid/gid on '$full'] );
}
### only chmod if we're allowed to, but never chmod symlinks, since they'll
### change the perms on the file they're linking too...
if( $CHMOD and not -l $full ) {
my $mode = $entry->mode;
unless ($SAME_PERMISSIONS) {
$mode &= ~(oct(7000) | umask);
}
CORE::chmod( $mode, $full ) or
$self->_error( qq[Could not chown '$full' to ] . $entry->mode );
}
return 1;
}
sub _make_special_file {
my $self = shift;
my $entry = shift or return;
my $file = shift; return unless defined $file;
inc/bundle/Archive/Tar.pm view on Meta::CPAN
sub rename {
my $self = shift;
my $file = shift; return unless defined $file;
my $new = shift; return unless defined $new;
my $entry = $self->_find_entry( $file ) or return;
return $entry->rename( $new );
}
=head2 $tar->chmod( $file, $mode )
Change mode of $file to $mode.
Returns true on success and false on failure.
=cut
sub chmod {
my $self = shift;
my $file = shift; return unless defined $file;
my $mode = shift; return unless defined $mode && $mode =~ /^[0-7]{1,4}$/;
my @args = ("$mode");
my $entry = $self->_find_entry( $file ) or return;
my $x = $entry->chmod( @args );
return $x;
}
=head2 $tar->chown( $file, $uname [, $gname] )
Change owner $file to $uname and $gname.
Returns true on success and false on failure.
=cut
inc/bundle/Archive/Tar.pm view on Meta::CPAN
By default, C<Archive::Tar> will try to C<chown> your files if it is
able to. In some cases, this may not be desired. In that case, set
this variable to C<0> to disable C<chown>-ing, even if it were
possible.
The default is C<1>.
=head2 $Archive::Tar::CHMOD
By default, C<Archive::Tar> will try to C<chmod> your files to
whatever mode was specified for the particular file in the archive.
In some cases, this may not be desired. In that case, set this
variable to C<0> to disable C<chmod>-ing.
The default is C<1>.
=head2 $Archive::Tar::SAME_PERMISSIONS
When, C<$Archive::Tar::CHMOD> is enabled, this setting controls whether
the permissions on files from the archive are used without modification
of if they are filtered by removing any setid bits and applying the
current umask.
inc/bundle/Archive/Tar/File.pm view on Meta::CPAN
return unless defined $path;
my ($prefix,$file) = $self->_prefix_and_file( $path );
$self->name( $file );
$self->prefix( $prefix );
return 1;
}
=head2 $bool = $file->chmod( $mode )
Change mode of $file to $mode. The mode can be a string or a number
which is interpreted as octal whether or not a leading 0 is given.
Returns true on success and false on failure.
=cut
sub chmod {
my $self = shift;
my $mode = shift; return unless defined $mode && $mode =~ /^[0-7]{1,4}$/;
$self->{mode} = oct($mode);
return 1;
}
=head2 $bool = $file->chown( $user [, $group])
Change owner of $file to $user. If a $group is given that is changed
as well. You can also pass a single parameter with a colon separating the
lib/CPANPLUS/Configure.pm view on Meta::CPAN
Returns true if the file can be saved, false otherwise.
=cut
sub can_save {
my $self = shift;
my $file = shift || CONFIG_USER_FILE->();
return 1 unless -e $file;
chmod 0644, $file;
return (-w $file);
}
=pod
=head2 $file = $conf->save( [$package_name] )
Saves the configuration to the package name you provided.
If this package is not C<CPANPLUS::Config::System>, it will
be saved in your C<.cpanplus> directory, otherwise it will
lib/CPANPLUS/Internals/Extract.pm view on Meta::CPAN
### print out what files we extracted ###
### No one needs to see this, but we'll log it
msg(loc("Extracted '%1'",$_),0) for @{$ae->files};
### set them all to be +w for the owner, so we don't get permission
### denied for overwriting files that are just +r
### this is too rigorous -- just change to +w for the owner [cpan #13358]
#chmod 0755, map { File::Spec->rel2abs( File::Spec->catdir($to, $_) ) }
# @{$ae->files};
for my $file ( @{$ae->files} ) {
my $path = File::Spec->rel2abs( File::Spec->catfile($to, $file) );
$self->_mode_plus_w( file => $path );
}
### check the return value for the extracted path ###
### Make an educated guess if we didn't get an extract_path
lib/CPANPLUS/Internals/Utils.pm view on Meta::CPAN
my $tmpl = {
file => { required => 1, allow => IS_FILE, store => \$file },
};
check( $tmpl, \%hash ) or return;
### set the mode to +w for a file and +wx for a dir
my $x = File::stat::stat( $file );
my $mask = -d $file ? 0100 : 0200;
if( $x and chmod( $x->mode|$mask, $file ) ) {
return 1;
} else {
error(loc("Failed to '%1' '%2': '%3'", 'chmod +w', $file, $!));
return;
}
}
=head2 $uri = $cb->_host_to_uri( scheme => SCHEME, host => HOST, path => PATH );
Turns a CPANPLUS::Config style C<host> entry into an URI string.
Returns the uri on success, and false on failure
lib/CPANPLUS/Internals/Utils.pm view on Meta::CPAN
file => { required => 1, store => \$file, allow => FILE_EXISTS }
};
check( $tmpl, \%hash ) or return;
### `touch` the file, so windoze knows it's new -jmb
### works on *nix too, good fix -Kane
### make sure it is writable first, otherwise the `touch` will fail
my $now = time;
unless( chmod( 0644, $file) && utime ($now, $now, $file) ) {
error( loc("Couldn't touch %1", $file) );
return;
}
return 1;
}
1;
t/00_CPANPLUS-Internals-Utils.t view on Meta::CPAN
foo();
}
### _mode_plus_w tests ###
{ open my $fh, ">$File" or die "Could not open $File for writing: $!";
close $fh;
### remove perms
ok( -e $File, "File '$File' created" );
ok( chmod( 000, $File ), " File permissions set to 000" );
ok( $Class->_mode_plus_w( file => $File ),
" File permissions set to +w" );
ok( -w $File, " File is writable" );
1 while unlink $File;
ok( !-e $File, " File removed" );
}
( run in 0.275 second using v1.01-cache-2.11-cpan-496ff517765 )