#!/bin/sh -efu

. girar-sh-functions

[ -n "${GIRAR_USER-}" ] ||
	fatal 'GIRAR_USER undefined'

usage()
{
	[ -z "$*" ] || echo >&2 "$PROG: $*"
cat >&2 <<EOF
Usage: $PROG <target_repo_name> <source_repo_name> <package_name_1> ...
where \`<target_repo_name>' is \`<binary_repository_name>'
                           or -b \`<binary_repository_name>'
                           or -p \`<pocket_repository_name>'
  and \`<source_repo_name>' is \`<binary_repository_name>'
                           or -p \`<pocket_repository_name>'
EOF
	exit 1
}

if [ "${1-}" = '--help' ]; then
	usage
fi

repo=
pocket=
if [ "$1" = "-b" ]; then
	shift
	repo="$1"
elif [ "$1" = "-p" ]; then
	shift
	pocket="$1"
else
	repo="$1"
fi
shift

if [ "$#" -lt 2 ]; then
	usage "not enough arguments"
fi

atexit()
{
	local rc=$?
	trap - EXIT
	[ "$rc" -eq 0 ] || girar-task rm "$id"
	exit $rc
}

trap '' HUP INT QUIT PIPE TERM
if [ -n "$pocket" ]; then
	id="$(girar-task new -p "$pocket")"
else
	id="$(girar-task new "$repo")"
fi
trap atexit EXIT

src="$1"
src_pocket=
if [ "$1" = "-p" ]; then
	shift
	src_pocket="-p"
	src="$1"
fi
shift

while [ $# -gt 0 ]; do
	name="$1"
	shift
	girar-task add "$id" copy "$name" $src_pocket "$src"
done

girar-task run "$id"
