diff --git a/bazelisk.sh b/bazelisk.sh index 7ba3153f717571..7ea8ba5998b55a 100755 --- a/bazelisk.sh +++ b/bazelisk.sh @@ -93,10 +93,18 @@ 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 "$@" \ + local qexpr="$1"; shift + # Bash can't pass whole arrays through functions so we pass the name of the + # array instead and expand it. + local name="$1"; shift + local pre_cmd_args=("${!name}") + + "$file" "${pre_cmd_args[@]}" cquery "$@" \ --output=starlark --starlark:expr="$qexpr" \ --ui_event_filters=-info --noshow_progress } @@ -121,6 +129,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 @@ -130,10 +146,9 @@ function main() { # outquery-all: return all output files associated with the label. # outquery-x: return output files containing the substring "x". # outquery.x: return output files ending with the substring ".x". - local qexpr - qexpr="$(outquery_starlark_expr "$1")" + local qexpr="$(outquery_starlark_expr "$1")" shift - do_outquery "$qexpr" "$@" + do_outquery "$qexpr" pre_cmd_args "$@" ;; build-then) # The 'build-then' command builds the requested targets and then @@ -149,14 +164,14 @@ function main() { shift local qexpr outfile qexpr="$(outquery_starlark_expr outquery)" - outfile=$(do_outquery "$qexpr" "$@") - "$file" build "$@" + outfile=$(do_outquery "$qexpr" pre_cmd_args "$@") + "$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 }