Fix cache-url -f

When there is a hashsum mismatch diskimage-builder forces downloads
with the -f switch of cache-url. This is currently broken because bash
escapes the quotes in curl_opts. This tricks curl trying to download
'no-cache' instead of the url. This can be fixed by using an array for
curl_opts which does the correct thing here.

Change-Id: Id9f1579dda9a3e0a2b08dd5faaeef0e2e580d419
This commit is contained in:
Tobias Henkel 2020-02-05 10:16:25 +01:00
parent 500e60dbf4
commit bad433fa92
No known key found for this signature in database
GPG Key ID: 03750DEC158E5FA2

View File

@ -61,7 +61,7 @@ done
url=$1 url=$1
dest=$2 dest=$2
time_cond= time_cond=
curl_opts="--retry 3 --retry-delay 30 " curl_opts=(--retry 3 --retry-delay 30)
if [ -z $url -o -z $dest ] ; then if [ -z $url -o -z $dest ] ; then
show_options 1 show_options 1
@ -77,7 +77,7 @@ else
fi fi
if [ "$FORCE_REVALIDATE" = "1" ]; then if [ "$FORCE_REVALIDATE" = "1" ]; then
curl_opts+="-H 'Pragma: no-cache, must-revalidate' -H 'Cache-Control: no-cache, must-revalidate'" curl_opts+=(-H "Pragma: no-cache, must-revalidate" -H "Cache-Control: no-cache, must-revalidate")
success="Downloaded and cached $url, having forced upstream caches to revalidate" success="Downloaded and cached $url, having forced upstream caches to revalidate"
elif [ -f $dest -a -s $dest ] ; then elif [ -f $dest -a -s $dest ] ; then
time_cond="-z $dest" time_cond="-z $dest"
@ -86,7 +86,7 @@ else
success="Downloaded and cached $url for the first time" success="Downloaded and cached $url for the first time"
fi fi
rcode=$(curl -v -L -o $tmp -w '%{http_code}' --connect-timeout 10 $curl_opts $url $time_cond) rcode=$(curl -v -L -o $tmp -w '%{http_code}' --connect-timeout 10 "${curl_opts[@]}" $url $time_cond)
if [ "$rcode" == "200" -o "${url:0:7}" == "file://" ] ; then if [ "$rcode" == "200" -o "${url:0:7}" == "file://" ] ; then
# In cases where servers ignore the Modified time, # In cases where servers ignore the Modified time,
# curl cancels the download, outputs a 200 and leaves # curl cancels the download, outputs a 200 and leaves