#!/bin/bash
# Copyright 2018 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=Build
### re-use a previous build directory set up by `fx set`

## usage: fx use DIR
##    or: fx --dir DIR use
##    or: fx use
##
## Switches further `fx` commands to using a different build directory.
## This only works if `fx --dir DIR set ...` succeeded previously
## (and DIR has not been removed since).  The next `fx build` or other
## such command will now refer to DIR.  The previous build directory is
## left in place, so you can switch back again with `fx use` later.
##
## fx use without arguments will list the available build directories, naming
## the current active build directory (if any).

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?

function main {
  local build_dir="$1"

  case "${build_dir}" in
  -h|--help)
    fx-command-help
    return 0
    ;;
  esac

  if [[ -z "${build_dir}" ]]; then
    build_dir="${_FX_BUILD_DIR}"
  fi

  if [[ -z "${build_dir}" ]]; then
    fx-warn "no new build dir selected, listing build directories:"
    fx-build-dir-if-present
    local current="${FUCHSIA_BUILD_DIR##"${FUCHSIA_DIR}"/}"
    if [[ -n "${current}" ]]; then
      echo "${current} (current)"
    fi
    for d in ${FUCHSIA_DIR}/out/*; do
      local build_dir="${d##"${FUCHSIA_DIR}"/}"
      if [[ "${build_dir}" != out/*.zircon && "${build_dir}" != out/*.device \
        && "${build_dir}" != "${current}" && "${build_dir}" != out/*crash.log ]]; then
        echo "${build_dir}"
      fi
    done
    return 1
  fi

  if [[ "$build_dir" == /* ]]; then
    local -r full_build_dir="${build_dir}"
  else
    local -r full_build_dir="${FUCHSIA_DIR}/${build_dir}"
  fi

  if [[ -e "${full_build_dir}/args.gn" ]]; then
    fx-change-build-dir "${build_dir}"
  else
    echo "\"${build_dir}\" is not a valid build dir."
    echo ""
    fx-command-help
    exit 1
  fi
}

main "$@"
