#!/bin/bash

. "$(dirname $0)/config"
. "$(dirname $0)/db-functions"

if [ $# -lt 3 ]; then
	msg "usage: ${0##*/} <repo-from> <repo-to> <pkgname|pkgbase> ..."
	exit 1
fi

args=(${@})
repo_from="${args[0]}"
repo_to="${args[1]}"
ftppath_from="${FTP_BASE}/${repo_from}/os/"
ftppath_to="${FTP_BASE}/${repo_to}/os/"

if ! check_repo_permission $repo_to || ! check_repo_permission $repo_from; then
	die "You don't have permission to move packages from ${repo_from} to ${repo_to}"
fi

# TODO: this might lock too much (architectures)
for pkgarch in ${ARCHES[@]}; do
	repo_lock ${repo_to} ${pkgarch} || exit 1
	repo_lock ${repo_from} ${pkgarch} || exit 1
done

msg "Moving packages from [${repo_from}] to [${repo_to}]..."

declare -A add_pkgs
declare -A remove_pkgs
for pkgbase in ${args[@]:2}; do
	tag_list=""
	for pkgarch in ${ARCHES[@]} 'any'; do
		for pkgname in ${pkgnames[@]}; do
			for tarch in ${tarches[@]}; do
				pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/"${pkgname}-${pkgver}-${pkgarch}${PKGEXT})
				pkgfile="${pkgpath##*/}"

				ln -s "../../../${PKGPOOL}/${pkgfile}" ${ftppath_to}/${tarch}/
				if [ -f ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ]; then
					ln -s "../../../${PKGPOOL}/${pkgfile}.sig" ${ftppath_to}/${tarch}/
				fi
				add_pkgs[${tarch}]+="${FTP_BASE}/${PKGPOOL}/${pkgfile} "
				remove_pkgs[${tarch}]+="${pkgname} "
			done
		done
	done
done

for tarch in ${ARCHES[@]}; do
	if [ -n "${add_pkgs[${tarch}]}" ]; then
		arch_repo_add "${repo_to}" "${tarch}" ${add_pkgs[${tarch}]}
		arch_repo_remove "${repo_from}" "${tarch}" ${remove_pkgs[${tarch}]}
	fi
done

for pkgarch in ${ARCHES[@]}; do
	repo_unlock ${repo_from} ${pkgarch}
	repo_unlock ${repo_to} ${pkgarch}
done
