platform_vendor_tequila/prebuilt/common/bin/wget
Steve Kondik d91ddb53a8 cm: Add a wrapper script for Curl which acts like wget
* Lots of stuff in the wild actually uses wget, and Toybox doesn't
   provide it. We already have Curl which does the same thing just
   with some different arguments. This wrapper script can handle it.

Change-Id: Ic02da709fcd29808b96fabcd1ac4ddd9465f635f
2015-11-14 23:56:10 +01:00

184 lines
5.5 KiB
Bash
Executable file

#!/system/bin/sh
# wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD
# Usage: wget [wget args] [i need to fill this in later] <url(s)>
# Download all URLs given using curl, but using wget's options.
#
#
# End of help.
# Copyright (c) 2015 Kylie McClain <somasis@exherbo.org>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
#
# End of copyright.
#
set -o pipefail
shopt -u shift_verbose >/dev/null 2>&1
help() {
sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \
while IFS= read help_line;do
if [[ "$help_line" == "End of help." ]];then
exit 0
else
printf "%s\n" "$help_line"
fi
done
exit 0
}
version() {
sed 's/^# //;s/, .* - version / /;2q;$!d' "$0"
copyright
exit 0
}
copyright() {
sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \
while IFS= read copyright_line;do
if [[ "$copyright_line" == "End of help." ]];then
true
elif [[ "$copyright_line" == "End of copyright." ]];then
break
else
printf '%s\n' "$copyright_line"
fi
done
}
stderr() {
printf "$@" >&2
}
error() {
stderr "$0: $1\n"
exit "$2"
}
invalid_arg() {
error "invalid option -- '$1'" 2
}
append_opt() {
for opt in $@;do
CURL_OPTS="${CURL_OPTS} ${opt}"
done
}
curl() {
eval "command curl $@ ${CURL_RAW}"
}
append_raw_arg() {
CURL_RAW="$CURL_RAW $@"
}
has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't
if [[ "$CURL_OPTS" == *" $1"* ]];then
return 0
else
return 1
fi
}
reexec_without() { # download afterwards without $1 in OPTS
reexec_args_without="$reexec_args_without $@"
reexec=1
}
reexec_only() {
for arg in $@;do
CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg"
done
}
print_url() {
has_opt -s || printf "%s\n" "$1"
}
# 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx
while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do
case "$argument" in
# a lot of these are noop right now because they are wget mirror args
# which curl doesn't really do, and i am not sure if i should implement them
4) append_opt -4 ;;
6) append_opt -6 ;;
A) true ;; # probably can't implement this easily...
B) true ;;
D) true ;;
E) true ;;
F) true ;; # curl doesn't care what the input is
H) true ;;
I) true ;;
K) true ;;
L) true ;;
N) true ;;
O) append_opt "-o $OPTARG" ;;
P) true ;;
Q) true ;;
R) true ;;
S) append_opt -I;reexec_without -I -s ;;
T) append_opt "-m $OPTARG" ;;
U) append_opt "--user-agent \"$OPTARG\"" ;;
V) version; curl --version; exit 0 ;;
X) true ;;
a) append_raw_arg "2>&1 | tee -a $OPTARG" ;;
b)
wget_log="wget-log"
i=1
while [[ -f "${wget_log}" ]];do
# if that exists, increment until we find something that doesn't
i=$(($i+1))
wget_log="wget-log.${i}"
done
append_raw_arg ">\"$wget_log\" 2>&1 &"
printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$"
;;
c) append_opt "-C -" ;;
d) append_opt "-v" ;;
e) true ;;
h) help ;;
i)
[[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3
for url in $(<"$OPTARG");do
URLS=( ${URLS[@]} "$url" )
done
;;
q) append_opt "-s" ;;
esac
shift $(($OPTIND-1))
done
# set wget default equivilants
append_opt -L # follow redirects
append_opt -# # progress bar
if [[ -z "${URLS[@]}" ]];then
URLS=( ${@} )
fi
for url in ${URLS[@]};do
url_file=${url##*/}
if [[ "$url" == "$url_file" ]];then
# has no remote file name and -o is not in CURL_OPTS... assume index.html
has_opt -o || append_opt "-o index.html"
fi
eval "print_url '$url';curl ${CURL_OPTS} -- $url"
if [[ "$reexec" ]];then
for reexec_arg in ${reexec_args_without};do
CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##")
done
eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url"
fi
done