summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/global/download.in17
-rwxr-xr-xconfigure2
-rw-r--r--scripts/functions23
3 files changed, 38 insertions, 4 deletions
diff --git a/config/global/download.in b/config/global/download.in
index 7a4cf48..fd651cb 100644
--- a/config/global/download.in
+++ b/config/global/download.in
@@ -89,7 +89,7 @@ endif # USE_MIRROR
config CONNECT_TIMEOUT
int
- prompt "connection timeout"
+ prompt "Connection timeout"
default 10
help
From the curl manual:
@@ -109,6 +109,21 @@ config CONNECT_TIMEOUT
Note that this value applies equally to wget if you have that installed.
+config DOWNLOAD_MAX_CHUNKS
+ int
+ prompt "Maximum number of // chunks"
+ default 5
+ range 1 10
+ help
+ If you have aria2 installed, then it will be used to download files.
+ Aria2 can split the download in chunks, and download those chunks in //
+ which can be interesting to speed up the download.
+
+ On the other hand, using many chunks, or even chunking in general, may
+ be seen by some site admins as being kind of unfair, or even as a DoS.
+ That's why the range of acceptable values is [1..10], and the default
+ is 5 (aria2's default).
+
config ONLY_DOWNLOAD
bool
prompt "Stop after downloading tarballs"
diff --git a/configure b/configure
index 78a4724..8bcaf0e 100755
--- a/configure
+++ b/configure
@@ -354,7 +354,7 @@ has_or_abort prog=libtool
ver='\(GNU libtool.*\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)' \
err="'libtool' 1.5.26 or above was not found"
has_or_abort prog=stat ver='GNU coreutils'
-has_or_abort prog="curl wget"
+has_or_abort prog="aria2c curl wget"
has_or_abort prog=cvs
has_or_abort prog=patch
has_or_abort prog=tar
diff --git a/scripts/functions b/scripts/functions
index 8d31872..fbf86f3 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -348,12 +348,31 @@ CT_DoGetFileCurl() {
|| true
}
+# Download using aria2
+# Usage: CT_DoGetFileAria2 <URL>
+CT_DoGetFileAria2() {
+ # Note: comments about curl method (above) are also valid here
+ # Plus: default progress indicator is a single line, so use verbose log
+ # so that the CT-NG's ouput is 'live'.
+ CT_DoExecLog ALL aria2c -l - -s ${CT_DOWNLOAD_MAX_CHUNKS} -m 3 --retry-wait 5 -t ${CT_CONNECT_TIMEOUT} -p "$1" \
+ || CT_DoExecLog ALL aria2c -l - -s ${CT_DOWNLOAD_MAX_CHUNKS} -m 3 --retry-wait 5 -t ${CT_CONNECT_TIMEOUT} "$1" \
+ || true
+}
+
+# OK, just look if we have them...
+_aria2c=$(CT_Which aria2c)
_wget=$(CT_Which wget)
_curl=$(CT_Which curl)
-# Wrapper function to call one of curl or wget
+
+# Wrapper function to call one of, in order of preference:
+# aria2
+# curl
+# wget
# Usage: CT_DoGetFile <URL>
CT_DoGetFile() {
- if [ -n "${_curl}" ]; then
+ if [ -n "${_aria2c}" ]; then
+ CT_DoGetFileAria2 "$1"
+ elif [ -n "${_curl}" ]; then
CT_DoGetFileCurl "$1"
elif [ -n "${_wget}" ]; then
CT_DoGetFileWget "$1"