aboutsummaryrefslogtreecommitdiff
path: root/tools/cpm/package/hash.sh
blob: bce46ecd6c285e5597b4fec6dcca7343263158cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/sh -e

# SPDX-FileCopyrightText: Copyright 2026 crueter
# SPDX-License-Identifier: LGPL-3.0-or-later

RETURN=0

usage() {
	cat <<EOF
Usage: cpmutil.sh package hash [-n|--dry-run] [-a|--all] [PACKAGE]...

Check the hash of a specific package or packages.
If a hash mismatch occurs, this script will update the package's hash.

Options:
    -n, --dry-run	Don't update the package's hash if it's a mismatch
    -a, --all       Operate on all packages in this project.

Note that this procedure will usually take a long time
depending on the number and size of dependencies.

EOF

	exit $RETURN
}

while :; do
	case "$1" in
	-[a-z]*)
		opt=$(printf '%s' "$1" | sed 's/^-//')
		while [ -n "$opt" ]; do
			# cut out first char from the optstring
			char=$(echo "$opt" | cut -c1)
			opt=$(echo "$opt" | cut -c2-)

			case "$char" in
			a) ALL=1 ;;
			n) DRY=1 ;;
			h) usage ;;
			*) die "Invalid option -$char" ;;
			esac
		done
		;;
	--dry-run) DRY=1 ;;
	--all) ALL=1 ;;
	--help) usage ;;
	"$0") break ;;
	"") break ;;
	*) packages="$packages $1" ;;
	esac

	shift
done

[ "$ALL" != 1 ] || packages="${LIBS:-$packages}"
[ "$DRY" = 1 ] && UPDATE=false || UPDATE=true
[ -n "$packages" ] || usage

export UPDATE

for pkg in $packages; do
	unset JSON
	echo "-- Package $pkg"

	export PACKAGE="$pkg"

	# shellcheck disable=SC1091
	. "$SCRIPTS"/vars.sh

	[ "$CI" = null ] || continue

	ACTUAL=$("$SCRIPTS"/util/url-hash.sh "$DOWNLOAD")

	if [ "$ACTUAL" != "$HASH" ] && [ "$QUIET" != true ]; then
		echo "-- * Expected $HASH"
		echo "-- * Got      $ACTUAL"

		if [ "$UPDATE" != "true" ]; then
			RETURN=1
			continue
		fi
	fi

	if [ "$UPDATE" = "true" ] && [ "$ACTUAL" != "$HASH" ]; then
		NEW_JSON=$(echo "$JSON" | jq ".hash = \"$ACTUAL\"")

		"$SCRIPTS"/util/replace.sh "$PACKAGE" "$NEW_JSON"
	fi
done

exit $RETURN