summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKerin Millar <kfm@plushkava.net>2024-06-24 22:34:37 +0100
committerKerin Millar <kfm@plushkava.net>2024-06-25 02:17:08 +0100
commit4cdb3c0869a9e6353fee69a7d61123ba8be01c06 (patch)
tree9512df3c39d55215412a2b3f703b65403762d194
parentHave is_subset() permit the empty string as a sentinel (diff)
downloadgentoo-functions-4cdb3c0869a9e6353fee69a7d61123ba8be01c06.tar.gz
gentoo-functions-4cdb3c0869a9e6353fee69a7d61123ba8be01c06.tar.bz2
gentoo-functions-4cdb3c0869a9e6353fee69a7d61123ba8be01c06.zip
Add the fetch() function
This function makes it trivial to issue a network request - such as HTTP GET - in a manner that is quiet and which yields a useful exit status value. It prefers curl if present but supports wget also. Signed-off-by: Kerin Millar <kfm@plushkava.net>
-rw-r--r--functions.sh42
1 files changed, 42 insertions, 0 deletions
diff --git a/functions.sh b/functions.sh
index 7e09611..9336174 100644
--- a/functions.sh
+++ b/functions.sh
@@ -48,6 +48,48 @@ chdir()
}
#
+# Considers the first parameter as an URL then attempts to fetch it with either
+# curl(1) or wget(1). If the URL does not contain a scheme then the https://
+# scheme shall be presumed. Both utilities shall be invoked in a manner that
+# suppresses all output unless an error occurs, and whereby HTTP redirections
+# are honoured. Upon success, the body of the response shall be printed to the
+# standard output. Otherwise, the return value shall be greater than 0.
+#
+fetch()
+{
+ if hash curl 2>/dev/null; then
+ fetch()
+ {
+ if [ "$#" -gt 0 ]; then
+ # Discard any extraneous parameters.
+ set -- "$1"
+ fi
+ curl -f -sS -L --connect-timeout 10 --proto-default https -- "$@"
+ }
+ elif hash wget 2>/dev/null; then
+ fetch()
+ {
+ if [ "$#" -gt 0 ]; then
+ # Discard any extraneous parameters.
+ case $1 in
+ ''|ftp://*|ftps://*|https://*)
+ set -- "$1"
+ ;;
+ *)
+ set -- "https://$1"
+ esac
+ fi
+ wget -nv -O - --connect-timeout 10 -- "$@"
+ }
+ else
+ warn "fetch: this function requires that curl or wget to be installed"
+ return 127
+ fi
+
+ fetch "$@"
+}
+
+#
# Determines whether the current shell is a subprocess of portage.
#
from_portage()