#!/bin/bash
# Copyright 2017 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=Software delivery
### check if packages are in base and update the device if needed
## usage: fx update-if-in-base PACKAGE_NAME [PACKAGE_NAME]*
##
## This command is to be used primarily by other commands, such as `fx test`.
##
## NOTE: once the incremental workflow lands, `fx ota` should always
## execute, and this command won't be needed anymore.

set -e

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

# Determine if the given package name is in the base package list
function is-in-base {
  # In base_packages.list, content.manifests is an array of paths. This query returns the string
  # "true" if the final segment of any of the paths is equal to $1, otherwise it returns the string
  # "false".
  local query=".content .manifests | map(. / \"/\" | .[-1]) | index(\"$1\") != null"
  local present=$(fx-command-run jq "$query" "${FUCHSIA_BUILD_DIR}/base_packages.list")

  local err=$?
  if [[ $err -ne 0 ]]; then
    fx-error "Unable to parse the base package list: ${FUCHSIA_BUILD_DIR}/base_packages.list"
    return err
  fi

  case "$present" in
    "true") return 0 ;;
    "false") return 1 ;;
    *)
      fx-error "Unexpected output parsing base package list: $present"
      return 2
  esac
}

function main {
  if [[ $# -lt 1 ]]; then
    fx-command-help
    exit 1
  fi

  local requires_update=0
  while [[ $# -gt 0 ]]; do
    if [[ "$1" == "-h" || "$1" == "--help" ]]; then
      fx-command-help
      exit 0
    fi
    local target="$1"
    shift
    if is-in-base "${target}"; then
      requires_update=1
      break
    fi
  done
  if (( requires_update )); then
    check-for-package-server || return 1

    echo >&2 "Package ${target} is in 'base', performing system update..."
    fx-command-run ota
    echo >&2 "System update complete, waiting for device to return"
    fx-command-run wait
  fi
}

main "$@"
