summaryrefslogtreecommitdiffstats
path: root/core/includes/downloader.inc
blob: 7ec8d872471150a027eae9a1f4222ff0295c1247 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
}