[pacman-dev] [PATCH 1/5] makepkg: break out check_checksums to reasonably sized functions
Allan McRae
allan at archlinux.org
Mon Sep 29 03:50:08 UTC 2014
On 16/08/14 01:41, Dave Reisner wrote:
> ---
> scripts/makepkg.sh.in | 94 +++++++++++++++++++++++++++++----------------------
> 1 file changed, 53 insertions(+), 41 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 8e8a64c..116b46e 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1177,53 +1177,65 @@ generate_checksums() {
> done
> }
>
> -check_checksums() {
> - (( SKIPCHECKSUMS )) && return 0
> - (( ! ${#source[@]} )) && return 0
Because you deleted this, a PKGBUILD with no sources gives:
==> Validating source files with md5sums...
==> Validating source files with sha1sums...
==> Validating source files with sha224sums...
==> Validating source files with sha256sums...
==> Validating source files with sha384sums...
==> Validating source files with sha512sums...
> +verify_integrity_one() {
> + local source_name=$1 integ=$2 expectedsum=$3
>
> - local correlation=0
> - local integ required
> - for integ in "${known_hash_algos[@]}"; do
> - local sumname="${integ}sums[@]"
> - local integrity_sums=("${!sumname}")
> - if (( ${#integrity_sums[@]} == ${#source[@]} )); then
> - msg "$(gettext "Validating source files with %s...")" "${integ}sums"
> - correlation=1
> - local idx errors=0
> - for (( idx = 0; idx < ${#source[*]}; idx++ )); do
> - local file="$(get_filename "${source[idx]}")"
> - printf ' %s ... ' "$file" >&2
> -
> - if [[ ${integrity_sums[idx]} = 'SKIP' ]]; then
> - printf '%s\n' "$(gettext "Skipped")" >&2
> - continue
> - fi
> + local file="$(get_filename "$source_name")"
> + printf ' %s ... ' "$file" >&2
>
> - if ! file="$(get_filepath "$file")"; then
> - printf '%s\n' "$(gettext "NOT FOUND")" >&2
> - errors=1
> - continue
> - fi
> + if [[ $expectedsum = 'SKIP' ]]; then
> + printf '%s\n' "$(gettext "Skipped")" >&2
> + return
> + fi
>
> - local expectedsum="${integrity_sums[idx],,}"
> - local realsum="$(openssl dgst -${integ} "$file")"
> - realsum="${realsum##* }"
> - if [[ $expectedsum = "$realsum" ]]; then
> - printf '%s\n' "$(gettext "Passed")" >&2
> - else
> - printf '%s\n' "$(gettext "FAILED")" >&2
> - errors=1
> - fi
> - done
> + if ! file="$(get_filepath "$file")"; then
> + printf '%s\n' "$(gettext "NOT FOUND")" >&2
> + return 1
> + fi
>
> - if (( errors )); then
> - error "$(gettext "One or more files did not pass the validity check!")"
> - exit 1 # TODO: error code
> - fi
> - elif (( ${#integrity_sums[@]} )); then
> - error "$(gettext "Integrity checks (%s) differ in size from the source array.")" "$integ"
> + local realsum="$(openssl dgst -${integ} "$file")"
> + realsum="${realsum##* }"
> + if [[ ${expectedsum,,} = "$realsum" ]]; then
> + printf '%s\n' "$(gettext "Passed")" >&2
> + else
> + printf '%s\n' "$(gettext "FAILED")" >&2
> + return 1
> + fi
> +
> + return 0
> +}
> +
> +verify_integrity_sums() {
> + local integ=$1 integrity_sums
> +
> + array_build integrity_sums "${integ}sums"
> +
So we used to do this:
local sumname="${integ}sums[@]"
local integrity_sums=("${!sumname}")
My question is why change to array_build? Is there an advantage that I
am missing?
> + if (( ${#integrity_sums[@]} == ${#source[@]} )); then
> + msg "$(gettext "Validating source files with %s...")" "${integ}sums"
> + local idx errors=0
> + for (( idx = 0; idx < ${#source[*]}; idx++ )); do
> + verify_integrity_one "${source[idx]}" "$integ" "${integrity_sums[idx]}" || errors=1
> + done
> +
> + if (( errors )); then
> + error "$(gettext "One or more files did not pass the validity check!")"
> exit 1 # TODO: error code
> fi
> + elif (( ${#integrity_sums[@]} )); then
> + error "$(gettext "Integrity checks (%s) differ in size from the source array.")" "$integ"
> + exit 1 # TODO: error code
> + else
> + return 1
> + fi
> +}
> +
> +check_checksums() {
> + (( SKIPCHECKSUMS )) && return 0
> +
> + local correlation=0
> + local integ
> + for integ in "${known_hash_algos[@]}"; do
> + verify_integrity_sums "$integ" && correlation=1
> done
>
> if (( ! correlation )); then
>
More information about the pacman-dev
mailing list