CPANPLUS
view release on metacpan or search on metacpan
lib/CPANPLUS/Internals/Utils.pm view on Meta::CPAN
return 1;
} else {
error(loc("Failed to move '%1' to '%2': %3", $from, $to, $!));
return;
}
}
=pod
=head2 $cb->_copy( from => $file|$dir, to => $target );
Moves a file or directory to the target.
Returns true on success, false on failure.
=cut
sub _copy {
my $self = shift;
my %hash = @_;
my($from,$to);
my $tmpl = {
file =>{ required => 1, allow => [IS_FILE,IS_DIR],
store => \$from },
to => { required => 1, store => \$to }
};
check( $tmpl, \%hash ) or return;
if( File::Copy::copy( $from, $to ) ) {
return 1;
} else {
error(loc("Failed to copy '%1' to '%2': %3", $from, $to, $!));
return;
}
}
=head2 $cb->_mode_plus_w( file => '/path/to/file' );
Sets the +w bit for the file.
Returns true on success, false on failure.
=cut
sub _mode_plus_w {
my $self = shift;
my %hash = @_;
require File::stat;
my $file;
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
=cut
sub _host_to_uri {
my $self = shift;
my %hash = @_;
my($scheme, $host, $path);
my $tmpl = {
scheme => { required => 1, store => \$scheme },
host => { default => 'localhost', store => \$host },
path => { default => '', store => \$path },
};
check( $tmpl, \%hash ) or return;
### it's an URI, so unixify the path.
### VMS has a special method for just that
$path = ON_VMS
? VMS::Filespec::unixify($path)
: File::Spec::Unix->catdir( File::Spec->splitdir( $path ) );
return "$scheme://" . File::Spec::Unix->catdir( $host, $path );
}
=head2 $cb->_vcmp( VERSION, VERSION );
Normalizes the versions passed and does a '<=>' on them, returning the result.
=cut
sub _vcmp {
my $self = shift;
my ($x, $y) = @_;
$x = $self->_version_to_number(version => $x);
$y = $self->_version_to_number(version => $y);
return $x <=> $y;
}
=head2 $cb->_home_dir
Returns the user's homedir, or C<cwd> if it could not be found
( run in 0.432 second using v1.01-cache-2.11-cpan-39bf76dae61 )