arti/maint/check_tree

49 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Use cargo-tree to check our dependencies for crates which we must
# not depend on unconditionally.
set -eu
forbid () {
local our_crate="$1"
local feature="$2"
local forbidden="$3"
set +e
cargo tree --prefix=none -p "$our_crate" --features "$feature" \
--format=" {p}" | grep "^ $forbidden "
# Note that the space in the grep pattern above is necessary to
# make sure we don't match prefixes. (The cargo tree output will be
# something like " cratename v1.2.3".)
local result="${PIPESTATUS[*]}"
set -e
case "$result" in
"0 0")
# cargo-tree succeeded, and so did grep: we found the
# forbidden package.
echo "Uh-oh: $forbidden has shown up in $our_crate/$feature."
exit 1
;;
"0 1")
# cargo-tree succeeded, and grep failed: we didn't find the
# forbidden package.
echo "Didn't find $forbidden in $our_crate/$feature. Good."
;;
*)
# cargo-tree failed (or maybe grep is gruesomely nonstandard)
echo "cargo tree failed unexpectedly when checking for $forbidden in $our_crate/$feature" >&2
exit 1
;;
esac
}
# We can't use these crates in arti/full, since they expose us to the old
# OpenSSL (3BSD + SSLeay) license.
forbid arti full ring
forbid arti full webpki
echo "Everything looks fine."