Fix download_with_progress() content_length calc

This commit is contained in:
justin 2026-01-26 14:32:47 -05:00 committed by Michel Roegl-Brunner
parent 54bbdc180a
commit 622fda4b32
2 changed files with 19 additions and 6 deletions

View File

@ -196,11 +196,19 @@ ensure_usr_local_bin_persist() {
download_with_progress() { download_with_progress() {
# $1 url, $2 dest # $1 url, $2 dest
local url="$1" out="$2" cl local url="$1" out="$2" content_length
need_tool curl pv || return 1 need_tool curl pv || return 1
cl=$(curl -fsSLI "$url" 2>/dev/null | awk 'tolower($0) ~ /^content-length:/ {print $2}' | tr -d '\r')
if [ -n "$cl" ]; then content_length=$(
curl -fsSL "$url" | pv -s "$cl" >"$out" || { curl -fsSLI "$url" 2>/dev/null |
# May return multiple values on redirect. i.e., 0 and content-length
# Cast $2 to int by adding 0 to it
awk '(tolower($1) ~ /^content-length:/) && ($2 + 0 > 0) {print $2+0}' |
tr -cd '[:digit:]' || true
)
if [ -n "$content_length" ]; then
curl -fsSL "$url" | pv -s "$content_length" >"$out" || {
msg_error "Download failed: $url" msg_error "Download failed: $url"
return 1 return 1
} }

View File

@ -1692,7 +1692,13 @@ function download_with_progress() {
# Content-Length aus HTTP-Header holen # Content-Length aus HTTP-Header holen
local content_length local content_length
content_length=$(curl -fsSLI "$url" | awk '/Content-Length/ {print $2}' | tr -d '\r' || true) content_length=$(
curl -fsSLI "$url" 2>/dev/null |
# May return multiple values on redirect. i.e., 0 and content_length
# Add 0 to $2 to cast it to int
awk '(tolower($1) ~ /^content-length:/) && ($2 + 0 > 0) {print $2+0}' |
tr -cd '[:digit:]' || true
)
if [[ -z "$content_length" ]]; then if [[ -z "$content_length" ]]; then
if ! curl -fL# -o "$output" "$url"; then if ! curl -fL# -o "$output" "$url"; then
@ -6205,4 +6211,3 @@ function fetch_and_deploy_archive() {
msg_ok "Successfully deployed archive to $directory" msg_ok "Successfully deployed archive to $directory"
return 0 return 0
} }