CPAN
view release on metacpan or search on metacpan
lib/CPAN/FTP.pm view on Meta::CPAN
($ccurllist->[$a] eq $ThesiteURL)
} 0..$last;
}
my(@levels);
$Themethod ||= "";
$self->debug("Themethod[$Themethod]reordered[@reordered]") if $CPAN::DEBUG;
my @all_levels = (
["dleasy", "file"],
["dleasy"],
["dlhard"],
["dlhardest"],
["dleasy", "http","defaultsites"],
["dlhard", "http","defaultsites"],
["dleasy", "ftp", "defaultsites"],
["dlhard", "ftp", "defaultsites"],
["dlhardest","", "defaultsites"],
);
if ($Themethod) {
@levels = grep {$_->[0] eq $Themethod} @all_levels;
push @levels, grep {$_->[0] ne $Themethod} @all_levels;
} else {
@levels = @all_levels;
}
@levels = qw/dleasy/ if $^O eq 'MacOS';
my($levelno);
local $ENV{FTP_PASSIVE} =
exists $CPAN::Config->{ftp_passive} ?
$CPAN::Config->{ftp_passive} : 1;
my $ret;
my $stats = $self->_new_stats($file);
LEVEL: for $levelno (0..$#levels) {
my $level_tuple = $levels[$levelno];
my($level,$scheme,$sitetag) = @$level_tuple;
$self->mymkpath($aslocal_dir) unless $scheme && "file" eq $scheme;
my $defaultsites = $sitetag && $sitetag eq "defaultsites" && !@$ccurllist;
my @urllist;
if ($defaultsites) {
unless (defined $connect_to_internet_ok) {
$CPAN::Frontend->myprint(sprintf qq{
I would like to connect to one of the following sites to get '%s':
%s
},
$file,
join("",map { " ".$_->text."\n" } @CPAN::Defaultsites),
);
my $answer = CPAN::Shell::colorable_makemaker_prompt("Is it OK to try to connect to the Internet?", "yes");
if ($answer =~ /^y/i) {
$connect_to_internet_ok = 1;
} else {
$connect_to_internet_ok = 0;
}
}
if ($connect_to_internet_ok) {
@urllist = @CPAN::Defaultsites;
} else {
my $sleep = 2;
# the tricky thing about dying here is that everybody
# believes that calls to exists() or all_objects() are
# safe.
require CPAN::Exception::blocked_urllist;
die CPAN::Exception::blocked_urllist->new;
}
} else { # ! $defaultsites
my @host_seq = $level =~ /dleasy/ ?
@reordered : 0..$last; # reordered has file and $Thesiteurl first
@urllist = map { $ccurllist->[$_] } @host_seq;
}
$self->debug("synth. urllist[@urllist]") if $CPAN::DEBUG;
my $aslocal_tempfile = $aslocal . ".tmp" . $$;
if (my $recommend = $self->_recommend_url_for($file,\@urllist)) {
@urllist = grep { $_ ne $recommend } @urllist;
unshift @urllist, $recommend;
}
$self->debug("synth. urllist[@urllist]") if $CPAN::DEBUG;
$ret = $self->hostdlxxx($level,$scheme,\@urllist,$file,$aslocal_tempfile,$stats);
if ($ret) {
CPAN->debug("ret[$ret]aslocal[$aslocal]") if $CPAN::DEBUG;
if ($ret eq $aslocal_tempfile) {
# if we got it exactly as we asked for, only then we
# want to rename
rename $aslocal_tempfile, $aslocal
or $CPAN::Frontend->mydie("Error while trying to rename ".
"'$ret' to '$aslocal': $!");
$ret = $aslocal;
}
elsif (-f $ret && $scheme eq 'file' ) {
# it's a local file, so there's nothing left to do, we
# let them read from where it is
}
$Themethod = $level;
my $now = time;
# utime $now, $now, $aslocal; # too bad, if we do that, we
# might alter a local mirror
$self->debug("level[$level]") if $CPAN::DEBUG;
last LEVEL;
} else {
unlink $aslocal_tempfile;
last if $CPAN::Signal; # need to cleanup
}
}
if ($ret) {
$stats->{filesize} = -s $ret;
}
$self->debug("before _add_to_statistics") if $CPAN::DEBUG;
$self->_add_to_statistics($stats);
$self->debug("after _add_to_statistics") if $CPAN::DEBUG;
if ($ret) {
unlink "$aslocal.bak$$";
return $ret;
}
unless ($CPAN::Signal) {
my(@mess);
local $" = " ";
if (@{$CPAN::Config->{urllist}}) {
push @mess,
qq{Please check, if the URLs I found in your configuration file \(}.
join(", ", @{$CPAN::Config->{urllist}}).
qq{\) are valid.};
} else {
push @mess, qq{Your urllist is empty!};
}
( run in 0.894 second using v1.01-cache-2.11-cpan-5837b0d9d2c )