#!/bin/bash
# Copyright 2021 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.

# This script allows a non-shell fx command to execute another command
# in a manner similar to fx-command-run for shell fx commands. This script is
# not intended to be used by end users directly.
#
# Non-shell fx commands are commands that are implemented in languages like
# Dart (eg fx test, fx status) and Rust (eg vdl, ffx). If these non-shell
# commands need to execute another fx command, they should not execute
# 'fx <command>', as this would not carry over the global flags from the
# original invocation and could trigger metrics as if the user had executed
# the command, which sways usage analysis. `fx-reentry` script solves it by
# executing a command directly without interpreting any global flag and
# without triggering metrics, while enforcing the original environment variables
# set by the original invocation.
#
# Usage:
#
#   fx-reentry <fx cmd> [args]       Executes the given command using fx-command-exec
#
#   fx-reentry -f <function> [args]  Executes a vars.sh function directly with the given
#                                    arguments
#
#
# This command will fail if it is executed without the environment variables
# that the main fx entry point sets. Make sure the spawned process in your
# chosen language inherits the environment that the original command received.
# For example, in Dart, don't specify the 'environment' argument to
# Process.run in https://api.dart.dev/stable/dart-io/Process/run.html, so that
# it will inherit the environment of the parent process. Other languages have
# similar ways to inherit the environment.


if [[ -z "${FX_ENTRY_CMD}" ]]; then
  echo >&2 "ERROR: $0 can only be executed from a fx command."
  echo >&2 "If spawning a new process from a non-shell fx command, make sure"
  echo >&2 "you keep the environment of the original process, so that required"
  echo >&2 "environment variables set in the initial 'fx' call are defined."
  exit 1
fi

if [[ -z "${FUCHSIA_DIR}" || ! -d "${FUCHSIA_DIR}" ]]; then
  echo >&2 "Invalid Fuchsia root dir: ${FUCHSIA_DIR}"
  exit 1
fi

source "${FUCHSIA_DIR}/tools/devshell/lib/vars.sh" || exit $?

is_valid_function() {
    declare -f "$1" > /dev/null
}

func=false
if [[ "$1" == "-f" ]]; then
  func=true
  shift
fi

if [[ $# -eq 0 ]]; then
  fx-error "No command or function specified."
  exit 1
fi

if $func; then
  if ! is_valid_function "$1"; then
    fx-error "Invalid function: $1"
    fx-error "Only functions in vars.sh are valid."
    exit 1
  fi
  "$@"
else
  fx-command-exec "$@"
fi
