| #!/bin/bash |
| # Copyright 2020 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| #### CATEGORY=Other |
| ### execute ffx - future fx |
| ## See fx ffx help for more information. |
| |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $? |
| source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/updates.sh || exit $? |
| fx-config-read |
| |
| if is-remote-workflow-device; then |
| fx-command-run host-tool ffx target add $(get-device-pair) |
| fi |
| |
| # NOTE: this could be improved if it knew enough about ffx args to |
| # short-circuit once it hits a command, but not all global flags take arguments |
| # (e.g. -v, --help), so it would be hard to keep those in sync. For now we |
| # accept the concession that something other than the global --target flag |
| # being spelled exactly --target as an argument is highly unlikely. |
| found_target=false |
| args=( |
| --config "sdk.root=${FUCHSIA_BUILD_DIR}" |
| --config sdk.type=in-tree |
| --config "repository.default=$(ffx-default-repository-name)" |
| ) |
| |
| while [[ $# -gt 0 ]]; do |
| arg="$1" |
| args+=("$1") |
| shift |
| |
| # Handle global flags explicitly, separating those which have parameters from |
| # those that do not, searching for --target. As soon as a non-known argument |
| # is discovered, pass all other flags as-is. |
| # This case should be kept in sync with the ffx global flags. |
| case "$arg" in |
| # target special case. |
| -t|--target) |
| found_target=true |
| args+=("$1") |
| shift |
| ;; |
| |
| # ffx global flags that have parameters. |
| -c|--config|-e|--env|-T|--timeout|--machine) |
| args+=("$1") |
| shift |
| ;; |
| |
| # ffx global flags that do not accept parameters. |
| -v|--verbose|-h|--help) |
| : |
| ;; |
| |
| # Any other flag results in all flags being passed forward as-is and the |
| # loop is terminated. |
| *) |
| args+=("$@") |
| break |
| ;; |
| esac |
| done |
| |
| if ! ${found_target}; then |
| # Note: the quotes around get-device-raw are critical, if no fx default |
| # device is set, we explicitly want to pass "" here. |
| args=(--target "$(get-device-raw)" "${args[@]}") |
| fi |
| |
| if [[ "${args[*]}" =~ "repository default" ]]; then |
| fx-warn "Inside the Fuchsia tree, ffx has a repository specified by fx" |
| fx-warn "Using default repositories via ffx repository default may have undefined behavior" |
| fx-warn "See http://fxbug.dev/90067 for more information." |
| fx-warn "Prefer:" |
| fx-warn " fx use" |
| fi |
| |
| if [[ "${args[*]}" =~ "target default" ]]; then |
| fx-warn "Inside the Fuchsia tree, ffx has a target specified by fx" |
| fx-warn "Using default targets via ffx target default may have undefined behavior" |
| fx-warn "See https://fxbug.dev/74963 for more information." |
| fx-warn "Prefer:" |
| fx-warn " fx set-device" |
| fx-warn " fx get-device" |
| fx-warn " fx unset-device" |
| fi |
| |
| fx-command-exec host-tool ffx "${args[@]}" |