# 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." if [ $# -eq 2 ]; then [ -z "$2" ] && perror "download: target file name given but empty" pinfo "Downloading $2 from '$1'...." wget -O "$2" "$1" local RET=$? else pinfo "Downloading '$1'...." wget "$1" local RET=$? fi [ "x$RET" != "x0" ] && perror "downloading $1 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 }