83 lines
1.8 KiB
Bash
83 lines
1.8 KiB
Bash
#!/bin/sh
|
|
|
|
CURDIR="$(realpath "$(dirname "$0")")"
|
|
|
|
. "${CURDIR}/../utils/sh/log.sh"
|
|
log "enable logging"
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
case $1 in
|
|
-h|-?|--help|help)
|
|
HELP=1
|
|
;;
|
|
-*)
|
|
echo "Error: Unsupported flag $1" >&2
|
|
return 1
|
|
;;
|
|
*) # No more options
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$HELP" ]; then
|
|
printf "\
|
|
usage %s <path/to/Cargoctoml>\n
|
|
-?|-h|--help\tthis message
|
|
" "$(basename "$0")"
|
|
exit
|
|
fi
|
|
|
|
generate_combinations() {
|
|
items="$1"
|
|
size=$2
|
|
current=$3
|
|
combination="$4"
|
|
|
|
if [ "$current" -eq "$size" ]; then
|
|
echo "$combination"
|
|
return
|
|
fi
|
|
|
|
# Split items into positional parameters
|
|
set -- $items
|
|
while [ $# -gt 0 ]; do
|
|
item=$1
|
|
shift
|
|
new_combination="$combination $item"
|
|
remaining_items="$@"
|
|
generate_combinations "$remaining_items" $size $(($current + 1)) "$new_combination"
|
|
set -- "$item" $@
|
|
done
|
|
}
|
|
|
|
CARGO_PATH="$1"
|
|
|
|
if [ -z "$CARGO_PATH" ]; then
|
|
printf "please provide path to Cargo.toml\n"
|
|
exit
|
|
fi
|
|
|
|
if [ -d "$CARGO_PATH" ]; then
|
|
CARGO_PATH="${CARGO_PATH}/Cargo.toml"
|
|
fi
|
|
|
|
features=$(grep '^\[features\]' "$CARGO_PATH" -A99999999 | grep '^\[' -m 2 -B99999999 | grep -v '^\[' | cut -d '=' -f 1 | grep -v 'default')
|
|
num_features=$(echo "$features" | wc -w | tr -d ' ')
|
|
|
|
i=1
|
|
while [ $i -le $num_features ]; do
|
|
echo "Generating combinations of size $i"
|
|
combos=$(generate_combinations "$features" $i 0 "")
|
|
echo "$combos" | while IFS= read -r line; do
|
|
combo=$(echo $line | xargs) # Trim
|
|
echo "Running clippy with features: $combo"
|
|
if ! cargo clippy --features "$combo"; then
|
|
echo "Error found in combination: $combo"
|
|
exit 1
|
|
fi
|
|
done
|
|
i=$((i + 1))
|
|
done
|