diff options
Diffstat (limited to 'core/includes/downloader.inc')
-rw-r--r-- | core/includes/downloader.inc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/core/includes/downloader.inc b/core/includes/downloader.inc new file mode 100644 index 00000000..7ec8d872 --- /dev/null +++ b/core/includes/downloader.inc @@ -0,0 +1,80 @@ +# helper functions for downloading files or packages + +# download a file. usage: +# download FROM [TO] +# 1. download "http://example.com/something.tar.gz" +# 2. download "http://example.com/something.tar.gz" "somename.tar.gz" +download () { + [ $# -lt 1 -o $# -gt 2 ] && perror "download called with $# arguments, need 1 or 2" + [ -z "$1" ] && perror "download: URL empty." + local URL="$1" + # If a sourceforge mirror is set in ./config, try to use it + if [ -n "$sourceforge_mirror" ] && [[ "$URL" != *use_mirror* ]] && [[ "$URL" == *sourceforge.net* || "$URL" == *.sf.net* ]]; then + if [[ "$URL" == *\?* ]]; then + URL+="&use_mirror=$sourceforge_mirror" + else + URL+="?use_mirror=$sourceforge_mirror" + fi + fi + if [ $# -eq 2 ]; then + [ -z "$2" ] && perror "download: target file name given but empty" + pinfo "Downloading $2 from '$URL'...." + wget -O "$2" "$URL" + local RET=$? + else + pinfo "Downloading '$URL'...." + wget "$URL" + local RET=$? + fi + [ "x$RET" != "x0" ] && perror "downloading $URL failed, wget returned exit code $RET" +} + +# download a file and untar it. usage: +# download_untar FROM TO_DIR [TEMPFILE] +# 1. download_untar "http://example.com/something.tar.gz" "src/" +# 2. download_untar "http://example.com/something.tar.gz" "src/" "temporary_name.tar.gz" +download_untar () { + [ $# -lt 2 -o $# -gt 3 ] && perror "download_untar called with $# arguments, need 2 or 3" + local URL="$1" + local DEST="$2" + if [ $# -eq 2 ]; then + local TMPFILE=dltmp.$(basename "$URL") + else + local TMPFILE="$3" + fi + pdebug "$URL ---> $TMPFILE" + download "$URL" "$TMPFILE" + mkdir -p "$DEST" + pinfo "Unpacking to '$DEST'..." + tar xf "$TMPFILE" -C "${DEST}/" + local RET=$? + [ "x$RET" != "x0" ] && perror "could not untar $TMPFILE to $DEST (tar returned $RET)" + unlink "$TMPFILE" +} + +# Download first param URL to second param path, +# iff the local file does not exist or is empty. +# Return 1 if remote file does not exist, 0 otherwise +download_if_empty() { + [ $# -ne 2 ] && perror "download_if_empty: want 2 args, got $# ($@)" + local SRC="$1" + local DST="$2" + [ -s "$DST" ] && pdebug "Not downloading $DST: already there." && return 0 + pdebug "Downloading $DST" + [ -e "$DST" ] && unlink "$DST" + local DSTDIR="$(dirname "$DST")" + pdebug "wgetting $SRC" + local TMP=$(mktemp) + wget -O "$TMP" "$SRC" + local RET=$? + if [ "x$RET" = "x0" -a -s "$TMP" ]; then + mkdir -p "$DSTDIR" + mv "$TMP" "$DST" || perror "Could not mv '$TMP' '$DST'" + return 0 + fi + pdebug "WGET failed" + rmdir "$DSTDIR" + unlink "$TMP" + return 1 +} + |