#!/bin/bash
# License: Unspecified

m4_include(lib/common.sh)

scriptname=${0##*/}

if [[ -z $1 ]]; then
	printf 'Usage: %s [pkgbase]\n' "$scriptname"
	exit 1
fi

pkgbase="${1}"

case $scriptname in
	extra2community)
		source_name='packages'
		target_name='community'
		source_repo='extra'
		target_repo='community'
		;;
	community2extra)
		source_name='community'
		target_name='packages'
		source_repo='community'
		target_repo='extra'
		;;
	*)
		die "Couldn't find configuration for %s" "$scriptname"
		;;
esac

server='repos.archlinux.org'
source_svn="svn+ssh://svn-${source_name}@${server}/srv/repos/svn-${source_name}/svn"
target_svn="svn+ssh://svn-${target_name}@${server}/srv/repos/svn-${target_name}/svn"
source_dbscripts="/srv/repos/svn-${source_name}/dbscripts"
target_dbscripts="/srv/repos/svn-${target_name}/dbscripts"

setup_workdir

pushd "$WORKDIR" >/dev/null

msg "Downloading sources for %s" "${pkgbase}"
svn -q checkout -N "${target_svn}" target_checkout
mkdir -p "target_checkout/${pkgbase}/repos"
svn -q export "${source_svn}/${pkgbase}/trunk" "target_checkout/${pkgbase}/trunk" || die
# shellcheck source=PKGBUILD.proto
. "target_checkout/${pkgbase}/trunk/PKGBUILD"

msg "Downloading packages for %s" "${pkgbase}"
for _arch in "${arch[@]}"; do
	if [[ "${_arch[*]}" == 'any' ]]; then
		repo_arch='x86_64'
	else
		repo_arch=${_arch}
	fi
	for _pkgname in "${pkgname[@]}"; do
		fullver=$(get_full_version "$_pkgname")
		pkgpath="/srv/ftp/$source_repo/os/$repo_arch/$_pkgname-$fullver-${_arch}.pkg.tar.*"
		# shellcheck disable=2029
		ssh "$server" "cp $pkgpath staging/$target_repo" || die
	done
done

msg "Adding %s to %s" "${pkgbase}" "${target_repo}"
svn -q add "target_checkout/${pkgbase}"
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" target_checkout
pushd "target_checkout/${pkgbase}/trunk" >/dev/null
archrelease "${arch[@]/#/$target_repo-}" || die
popd >/dev/null

# shellcheck disable=2029
ssh "${server}" "${target_dbscripts}/db-update" || die

msg "Removing %s from %s" "${pkgbase}" "${source_repo}"
for _arch in "${arch[@]}"; do
	# shellcheck disable=2029
	ssh "${server}" "${source_dbscripts}/db-remove ${source_repo} ${_arch} ${pkgbase}"
done
svn -q checkout -N "${source_svn}" source_checkout
svn -q up "source_checkout/${pkgbase}"
svn -q rm "source_checkout/${pkgbase}"
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" source_checkout

popd >/dev/null