#!/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=Device management
### copy a file to/from a target device

## usage: fx cp [-r] [--to-target|--to-host] SRC... DST
##
## Copies a file from the host to the target device, or vice versa.
##
## -r: recursively copy directories
## --to-target: copy file SRC from host to DST on the target
## --to-host: copy file SRC from target to DST on the host
##
## The default is to copy files to the target.


source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?

set -e

recurse=false
to_target=true
# Process all the args except the last two.
while (( "$#" > 2 )); do
  case "$1" in
  -r)
    recurse=true
    shift
    ;;
  --to-target)
    to_target=true
    shift
    ;;
  --to-host)
    to_target=false
    shift
    ;;
  --help)
    fx-command-help
    exit 1
  esac
done

if [[ $# -lt 2 ]]; then
  fx-command-help
  exit 1
fi

args=( "$@" )
nargs=${#args[@]}
dst=${args[$nargs-1]}
srcs=( "${args[@]:0:$nargs-1}" )
host="$(get-fuchsia-device-addr)"

sftp_args=()
sftp_command_args=()

if [[ "${recurse}" = "true" ]]; then
  sftp_command_args+=( "-r" )
fi

port="$(get-device-ssh-port)"
if [[ -n "${port}" ]]; then
  sftp_args+=( "-P" "${port}" )
fi

sftp_args+=(
  "-q"
  "-b" "-"
  "[${host}]"
)

if [[ "${to_target}" = "true" ]]; then
  (
  for src in "${srcs[@]}"; do
    echo "put ${sftp_command_args} \"${src}\" \"${dst}\""
  done
  ) | fx-command-run sftp "${sftp_args[@]}" > /dev/null
else
  (
  for src in "${srcs[@]}"; do
    echo "get ${sftp_command_args} \"${src}\" \"${dst}\""
  done
  ) | fx-command-run sftp "${sftp_args[@]}" > /dev/null
fi
