d91ddb53a8
* 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
185 lines
5.5 KiB
Bash
Executable File
185 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
|