Skip to content

Commit

Permalink
[bazel] Allow ./bazelisk.sh to use --bazelrc flags
Browse files Browse the repository at this point in the history
These flags need to come _before_ the subcommand, i.e.:

```
bazel --bazelrc=... cquery # VALID
bazel cquery --bazelrc=... # INVALID
```

which is done in this script by pushing flags that come before the
subcommand name into an array and re-applying them in the correct order
later.

If these Bash arrays are confusing and you've come across this commit in
a `git blame` then hopefully this will help:

1. Bash supports arrays defined using parentheses: `array=("foo" "bar")`
2. Arrays can't be passed as arguments to functions, they are expanded
   and get mixed into other arguments, so we use a global instead.
4. the syntax for expanding an array into its elements with correct
   quoting on each is: `"${array[@]}"`.

Signed-off-by: James Wainwright <[email protected]>
  • Loading branch information
jwnrt committed Jan 17, 2024
1 parent 710c9f9 commit 4d88b95
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions bazelisk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,15 @@ function outquery_starlark_expr() {
esac
}

# Arguments:
# $qexpr: starlark expression - see `outquery_starlark_expr`
# $name: name of an array containing Bazel arguments that should come _before_
# the subcommand (e.g. `--bazelrc=...`).
function do_outquery() {
local qexpr="$1"
shift
"$file" cquery "$@" \

"$file" "${pre_cmd_args[@]}" cquery "$@" \
--output=starlark --starlark:expr="$qexpr" \
--ui_event_filters=-info --noshow_progress
}
Expand All @@ -121,6 +126,14 @@ function main() {
fi
fi

# Shift all flags (starting with `-`) that come before the subcommand
# into an array.
pre_cmd_args=()
while [[ "${1-}" == -* ]]; do
pre_cmd_args+=("$1")
shift
done

case "${1-}" in
outquery*)
# The custom 'outquery' command can be used to query bazel for the
Expand Down Expand Up @@ -150,13 +163,13 @@ function main() {
local qexpr outfile
qexpr="$(outquery_starlark_expr outquery)"
outfile=$(do_outquery "$qexpr" "$@")
"$file" build "$@"
"$file" "${pre_cmd_args[@]}" build "$@"
# shellcheck disable=SC2059
# We are intentionally using $command_template as a format string.
eval "$(printf "$command_template" "$outfile")"
;;
*)
exec "$file" "$@"
exec "$file" "${pre_cmd_args[@]}" "$@"
;;
esac
}
Expand Down

0 comments on commit 4d88b95

Please sign in to comment.