blob: e679e6dd58d9379bbb70360c28dcf9c89b9a21b3 [file] [log] [blame]
#!/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
readonly base_packages_file="${FUCHSIA_BUILD_DIR}/base_packages.list"
# Determine if the given package name is in the base package list
function is-in-base {
grep "^$1$" "${base_packages_file}" > /dev/null
}
function main {
if [[ $# -lt 1 ]]; then
fx-command-help
exit 1
fi
if [[ ! -f "${base_packages_file}" ]]; then
echo >&2 "Base packages file not found, please update your build: ${base_packages_file}"
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 "$@"