summaryrefslogblamecommitdiffstats
path: root/helper/downloader.inc
blob: e12c8a020537cefe69a1f462d6f7a382a1d86aed (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                                                           
                                                    
                             
                                                                                  
















                                                                                                 

                       


                                                      
                                  
          
                                   








                                                                                             

























                                                                                  
# 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
}