37 lines
970 B
Bash
Executable File
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
|