blob: 3a4f44aac2371ce43cd89e54dcdf31212ee44534 [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.
### build target/all then sync artifacts to device
## usage: fx build-sync [target, ...]
set -e
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh
fx-config-read
function __fbuild_make_batch {
# parse a bootfs manifest, compare inputs to a stamp file and append
# sftp commands to a batch file to update changed files.
local manifest stamp_file batch_file userfs_path build_path
manifest=$1
stamp_file=$2
batch_file=$3
while IFS=\= read userfs_path build_path; do
if [[ -z "${build_path}" ]]; then
continue
fi
if [[ $build_path -nt $stamp_file ]]; then
local device_path=/system/${userfs_path}
echo "Updating ${device_path} with ${build_path}"
echo "-rm ${device_path}" >> "$batch_file"
echo "put ${build_path} ${device_path}" >> "$batch_file"
fi
done < "$manifest"
}
function main {
local stamp_file status_file batch_file package host
stamp_file="${FUCHSIA_BUILD_DIR}/.fbuild-sync-stamp"
status_file="${FUCHSIA_BUILD_DIR}/.fbuild-sync-status"
batch_file="${FUCHSIA_BUILD_DIR}/.fbuild-sync-batchfile"
touch "${status_file}"
if [[ "$(cat "${status_file}")" != "failed" ]]; then
touch "${stamp_file}"
fi
fx-command-run build "$@"
if [[ $? -ne 0 ]]; then
echo "failed" > "${status_file}"
return 1
fi
echo -n > "${batch_file}"
__fbuild_make_batch \
"${FUCHSIA_BUILD_DIR}/gen/build/gn/system.bootfs.manifest" \
"${stamp_file}" "${batch_file}"
while read package; do
__fbuild_make_batch \
"${FUCHSIA_BUILD_DIR}/package/${package}/system_manifest" \
"${stamp_file}" "${batch_file}"
done < ${FUCHSIA_BUILD_DIR}/gen/build/gn/packages
echo "Syncing changed system.bootfs files..."
host="$(fx-command-run netaddr --fuchsia)"
fx-command-run sftp -q -b "${batch_file}" "[${host}]" > /dev/null
if [ $? -ne 0 ]; then
echo "failed" > "${status_file}"
return 1
fi
rm -f "${stamp_file}"
rm -f "${status_file}"
rm -f "${batch_file}"
}
main "$@"