73 lines
1.6 KiB
Bash
73 lines
1.6 KiB
Bash
#!/bin/sh
|
|
|
|
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
|
|
|
|
CARGO_PATH="$1"
|
|
|
|
if [ ! "$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')
|
|
|
|
|
|
generate_combinations() {
|
|
local items=($1)
|
|
local size=$2
|
|
local current=$3
|
|
local combination=$4
|
|
|
|
if [ $current -eq $size ]; then
|
|
echo "$combination"
|
|
return
|
|
fi
|
|
|
|
for ((i = 0; i < ${#items[@]}; ++i)); do
|
|
new_combination="$combination ${items[$i]}"
|
|
remaining_items=("${items[@]:0:$i}" "${items[@]:$((i + 1))}")
|
|
generate_combinations "$(IFS=" "; echo "${remaining_items[*]}")" $size $((current + 1)) "$new_combination"
|
|
done
|
|
}
|
|
|
|
for ((i = 1; i <= $(wc -w <<< "$features"); ++i)); do
|
|
echo "Generating combinations of size $i"
|
|
combos=$(generate_combinations "$features" $i 0 "")
|
|
echo "$combos" | while read line
|
|
do
|
|
echo "Running clippy with features: $line"
|
|
combo=$(echo $combo | xargs) # Trim
|
|
echo "Running clippy with features: $combo"
|
|
if ! cargo clippy --features "$combo"; then
|
|
echo "Error found in combination: $combo"
|
|
exit 1
|
|
fi
|
|
done
|
|
done
|