#!/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 {
  fx-command-run list-packages --base "^$1$" > /dev/null
}

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-amber-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 "$@"
