blob: b139e258f7822597a376f36b6f28dc2ea440ce63 [file] [log] [blame]
#!/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[@]}"