@@ -130,7 +130,7 @@ docker::_download() {
130130 local -r user=" $1 " registry=" $2 " tag=" $4 " arch=" $5 "
131131 local image=" $3 "
132132
133- local req_params=() layers=() missing_digests=() cached_digests= manifest= config= media_type =
133+ local req_params=() layers=() missing_digests=() media_types=() cached_digests= manifest= config=
134134 local accept_manifest_list=(" -H" " Accept: application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.index.v1+json" )
135135 local accept_manifest=(" -H" " Accept: application/vnd.docker.distribution.manifest.v2+json, application/vnd.oci.image.manifest.v1+json" )
136136 local url_manifest=" ${curl_proto} ://${registry} /v2/${image} /manifests/${tag} "
@@ -155,8 +155,8 @@ docker::_download() {
155155 # Fetch the image manifest.
156156 common::log INFO " Fetching image manifest"
157157 common::curl " ${curl_opts[@]} " " ${accept_manifest[@]} " " ${req_params[@]} " -- " ${url_manifest} " \
158- | common::jq -r ' (.config.digest | ltrimstr("sha256:"))? // empty, (.layers[0 ].mediaType)? // empty, ([.layers[].digest | ltrimstr("sha256:")] | reverse | @tsv)?' \
159- | { common::read -r config; common::read -r media_type ; IFS=$' \t ' common::read -r -a layers; }
158+ | common::jq -r ' (.config.digest | ltrimstr("sha256:"))? // empty, ([ .layers[].mediaType] | reverse | @tsv )? // empty, ([.layers[].digest | ltrimstr("sha256:")] | reverse | @tsv)?' \
159+ | { common::read -r config; IFS= $' \t ' common::read -r -a media_types ; IFS=$' \t ' common::read -r -a layers; }
160160
161161 if [ -z " ${config} " ] || [ " ${# layers[@]} " -eq 0 ]; then
162162 common::err " Could not parse digest information from ${url_manifest} "
@@ -185,7 +185,7 @@ docker::_download() {
185185 if [ " ${# missing_digests[@]} " -gt 0 ]; then
186186 common::log INFO " Downloading ${# missing_digests[@]} missing layers..." NL
187187 BASH_ENV=" ${BASH_SOURCE[0]} " parallel --plain ${TTY_ON+--bar} --shuf --retries 2 -j " ${ENROOT_MAX_CONNECTIONS} " -q \
188- docker::_download_extract " {}" " ${media_type }" " ${curl_opts[@]} " -f " ${req_params[@]} " -- " ${url_digest} sha256:{}" ::: " ${missing_digests[@]} "
188+ docker::_download_extract " {1 }" " {2 }" " ${curl_opts[@]} " -f " ${req_params[@]} " -- " ${url_digest} sha256:{1 }" ::: " ${missing_digests[@]} " :::+ " ${media_types [@]}"
189189 common::log
190190 else
191191 common::log INFO " Found all layers in cache"
0 commit comments