Files
ports/ports/Mk/Scripts/checksum-cargo.sh
T

37 lines
970 B
Bash
Executable File

#!/bin/sh
set -eu
if [ "$#" -lt 4 ]; then
printf '%s\n' \
"usage: checksum-cargo.sh DISTDIR DISTINFO SHA256_COMMAND CRATE/VERSION..." >&2
exit 2
fi
distdir=$1
distinfo=$2
sha256_command=$3
shift 3
for crate in "$@"; do
name=${crate%/*}
version=${crate##*/}
distfile=$name-$version.crate
expected=$(sed -n "s/^SHA256 ($distfile) = //p" "$distinfo")
case "$expected" in
????????????????????????????????????????????????????????????????) ;;
*) printf '%s\n' "invalid or missing checksum for $distfile" >&2; exit 1 ;;
esac
case "$expected" in
*[!0-9a-f]*) printf '%s\n' "invalid checksum for $distfile" >&2; exit 1 ;;
esac
case "${sha256_command##*/}" in
sha256sum) actual=$("$sha256_command" "$distdir/$distfile"); actual=${actual%% *} ;;
*) actual=$("$sha256_command" -q "$distdir/$distfile") ;;
esac
[ "$actual" = "$expected" ] || {
printf '%s\n' \
"$distfile checksum mismatch: expected $expected, got $actual" >&2
exit 1
}
done