From af6ed41bcb47019cce2a7035bad76c97ac97b92a Mon Sep 17 00:00:00 2001 From: Maggie Spletzer Date: Thu, 20 Apr 2023 17:01:11 -0400 Subject: [PATCH] Adding curl --retry-all-errors for external tool downloads (#2557) * adding retry-all-errors based on curl version >= 7.71.0 * adding logging * fixing conditional logic --- src/Misc/externals.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Misc/externals.sh b/src/Misc/externals.sh index 4a1254f33..5e86a75d3 100755 --- a/src/Misc/externals.sh +++ b/src/Misc/externals.sh @@ -55,13 +55,23 @@ function acquireExternalTool() { # Download from source to the partial file. echo "Downloading $download_source" mkdir -p "$(dirname "$download_target")" || checkRC 'mkdir' + + CURL_VERSION=$(curl --version | awk 'NR==1{print $2}') + echo "Curl version: $CURL_VERSION" + # curl -f Fail silently (no output at all) on HTTP errors (H) # -k Allow connections to SSL sites without certs (H) # -S Show error. With -s, make curl show errors when they occur # -L Follow redirects (H) # -o FILE Write to FILE instead of stdout # --retry 3 Retries transient errors 3 times (timeouts, 5xx) - curl -fkSL --retry 3 -o "$partial_target" "$download_source" 2>"${download_target}_download.log" || checkRC 'curl' + if [[ "$(printf '%s\n' "7.71.0" "$CURL_VERSION" | sort -V | head -n1)" != "7.71.0" ]]; then + # Curl version is less than or equal to 7.71.0, skipping retry-all-errors flag + curl -fkSL --retry 3 -o "$partial_target" "$download_source" 2>"${download_target}_download.log" || checkRC 'curl' + else + # Curl version is greater than 7.71.0, running curl with --retry-all-errors flag + curl -fkSL --retry 3 --retry-all-errors -o "$partial_target" "$download_source" 2>"${download_target}_download.log" || checkRC 'curl' + fi # Move the partial file to the download target. mv "$partial_target" "$download_target" || checkRC 'mv'