diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/download.pl | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/scripts/download.pl b/scripts/download.pl index 2b193ff5b6..79ad8bfea0 100755 --- a/scripts/download.pl +++ b/scripts/download.pl @@ -25,6 +25,8 @@ my @mirrors; my $ok; my $check_certificate = $ENV{DOWNLOAD_CHECK_CERTIFICATE} eq "y"; +my $custom_tool = $ENV{DOWNLOAD_TOOL_CUSTOM}; +my $download_tool; $url_filename or $url_filename = $filename; @@ -85,16 +87,42 @@ sub tool_present { return $present } +sub select_tool { + $custom_tool =~ tr/"//d; + if ($custom_tool) { + return $custom_tool; + } + + # Try to use curl if available + if (tool_present("curl", "curl")) { + return "curl"; + } + + # No tool found, fallback to wget + return "wget"; +} + sub download_cmd { my $url = shift; my $filename = shift; - my $additional_mirrors = join(" ", map "$_/$filename", @_); - my @chArray = ('a'..'z', 'A'..'Z', 0..9); - my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9; + if ($download_tool eq "curl") { + return (qw(curl -f --connect-timeout 20 --retry 5 --location), + $check_certificate ? () : '--insecure', + shellwords($ENV{CURL_OPTIONS} || ''), + $url); + } elsif ($download_tool eq "wget") { + return (qw(wget --tries=5 --timeout=20 --output-document=-), + $check_certificate ? () : '--no-check-certificate', + shellwords($ENV{WGET_OPTIONS} || ''), + $url); + } elsif ($download_tool eq "aria2c") { + my $additional_mirrors = join(" ", map "$_/$filename", @_); + my @chArray = ('a'..'z', 'A'..'Z', 0..9); + my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9; - if (tool_present('aria2c', 'aria2')) { @mirrors=(); + return join(" ", "[ -d $ENV{'TMPDIR'}/aria2c ] || mkdir $ENV{'TMPDIR'}/aria2c;", "touch $ENV{'TMPDIR'}/aria2c/${rfn}_spp;", qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $url, $additional_mirrors, @@ -104,16 +132,8 @@ sub download_cmd { "-d $ENV{'TMPDIR'}/aria2c -o $rfn;", "cat $ENV{'TMPDIR'}/aria2c/$rfn;", "rm $ENV{'TMPDIR'}/aria2c/$rfn $ENV{'TMPDIR'}/aria2c/${rfn}_spp"); - } elsif (tool_present('curl', 'curl')) { - return (qw(curl -f --connect-timeout 20 --retry 5 --location), - $check_certificate ? () : '--insecure', - shellwords($ENV{CURL_OPTIONS} || ''), - $url); } else { - return (qw(wget --tries=5 --timeout=20 --output-document=-), - $check_certificate ? () : '--no-check-certificate', - shellwords($ENV{WGET_OPTIONS} || ''), - $url); + return join(" ", $download_tool, $url); } } @@ -326,6 +346,8 @@ if (-f "$target/$filename") { }; } +$download_tool = select_tool(); + while (!-f "$target/$filename") { my $mirror = shift @mirrors; $mirror or die "No more mirrors to try - giving up.\n"; |