[pacman-dev] [PATCH 1/3] makepkg: break out check_checksums to reasonably sized functions

Dave Reisner dreisner at archlinux.org
Thu Aug 7 20:46:16 EDT 2014


---
 scripts/makepkg.sh.in | 95 +++++++++++++++++++++++++++++----------------------
 1 file changed, 54 insertions(+), 41 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 4b23a5b..cb5ded9 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1111,53 +1111,66 @@ generate_checksums() {
 	done
 }
 
-check_checksums() {
-	(( SKIPCHECKSUMS )) && return 0
-	(( ! ${#source[@]} )) && return 0
+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"
+
+	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
+	(( ! ${#source[@]} )) && return 0
+
+	local correlation=0
+	local integ
+	for integ in "${known_hash_algos[@]}"; do
+		verify_integrity_sums "$integ" && correlation=1
 	done
 
 	if (( ! correlation )); then
-- 
2.0.4


More information about the pacman-dev mailing list