#!/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 "$@"
