benchmarks/driver.sh: quote path to fish if necessary

To allow paths with spaces, give a shell-quoted path to hyperfine. We
could make this a bit shorter by quoting as early as possible, like

	FISH_PATH=$(quote "$1")

and then use $FISH_PATH unquoted. I discarded that idea because it
probably looks surprising.

Closes #8559
This commit is contained in:
Johannes Altmanninger 2021-12-19 11:08:18 +01:00
parent 0d67dd19a1
commit db7bea1a3e

View file

@ -9,20 +9,30 @@ FISH_PATH=$1
FISH2_PATH=$2 FISH2_PATH=$2
BENCHMARKS_DIR=$(dirname "$0")/benchmarks BENCHMARKS_DIR=$(dirname "$0")/benchmarks
quote() {
# Single-quote the given string for a POSIX shell, except in common cases that don't need it.
printf %s "$1" |
sed "/[^[:alnum:]\/.-]/ {
s/'/'\\\''/g
s/^/'/
s/\$/'/
}"
}
for benchmark in "$BENCHMARKS_DIR"/*; do for benchmark in "$BENCHMARKS_DIR"/*; do
basename "$benchmark" basename "$benchmark"
[ -n "$FISH2_PATH" ] && echo "$FISH_PATH" [ -n "$FISH2_PATH" ] && echo "$FISH_PATH"
${FISH_PATH} --print-rusage-self "$benchmark" > /dev/null "${FISH_PATH}" --print-rusage-self "$benchmark" > /dev/null
if [ -n "$FISH2_PATH" ]; then if [ -n "$FISH2_PATH" ]; then
echo "$FISH2_PATH" echo "$FISH2_PATH"
${FISH2_PATH} --print-rusage-self "$benchmark" > /dev/null "${FISH2_PATH}" --print-rusage-self "$benchmark" > /dev/null
fi fi
if command -v hyperfine >/dev/null 2>&1; then if command -v hyperfine >/dev/null 2>&1; then
if [ -n "$FISH2_PATH" ]; then if [ -n "$FISH2_PATH" ]; then
hyperfine "${FISH_PATH} $benchmark > /dev/null" "${FISH2_PATH} $benchmark > /dev/null" hyperfine "$(quote "${FISH_PATH}") $benchmark > /dev/null" "$(quote "${FISH2_PATH}") $benchmark > /dev/null"
else else
hyperfine "${FISH_PATH} $benchmark > /dev/null" hyperfine "$(quote "${FISH_PATH}") $benchmark > /dev/null"
fi fi
fi fi
done done