#!/bin/sh

source /etc/makepkg.conf
if [ -e "${XDG_CONFIG_HOME}/pacman/makepkg.conf" ]; then
	source "${XDG_CONFIG_HOME}/pacman/makepkg.conf"
elif [ -e ~/.makepkg.conf ]; then
	source ~/.makepkg.conf
fi
source /etc/conf.d/eworm-repo
source /usr/lib/eworm/noroot
source /usr/lib/eworm/nice

# There may be some implications where gpg-agent starts X11 pinentry. So
# unset DISPLAY and have ncurses pinentry.
unset DISPLAY

function help() {
	echo "usage: ${0} [OPTIONS]"
	echo
	echo "where OPTIONS are:"
	echo " -h          show this help"
	echo " -p PACKAGE  import PACKAGE"
}

PACKAGE=""

while getopts "hp:" opt; do
	case ${opt} in
		h)
			help
			exit 0
			;;
		p)
			PACKAGE="${OPTARG}"
			;;
	esac
done

if [ -z "${PACKAGE}" ]; then
	echo "Error: No package given!" >&2
	help
	exit 1
fi

PKGARCH="$(bsdtar --to-stdout -xf "${PACKAGE}" ".PKGINFO" 2>&1 | grep 'arch =' | cut -d' ' -f3)"
PKGNAME="$(bsdtar --to-stdout -xf "${PACKAGE}" ".PKGINFO" 2>&1 | grep 'pkgname =' | cut -d' ' -f3)"

case "${PKGARCH}" in
	x86_64)
		echo "Package architecture is ${PKGARCH}."
		ANYARCH=("${PKGARCH}")
		;;
	any)
		echo "Package is for any architecture."
		ANYARCH=('x86_64')
		;;
	*)
		echo "Architecture '${OPTARG}' is unknown." >&2
		help
		exit 1
		;;
esac

if ! gpg --quiet --no-permission-warning --homedir /etc/pacman.d/gnupg/ --verify "${PACKAGE}.sig"; then
	echo "Providedd signature is invalid!" >&2
	exit 1
fi

if ! cp "${PACKAGE}"{,.sig} ${REPODIR}/${PKGARCH}/; then
	echo "Could not copy to repository." >&2
	exit 1
fi

if [ "${PKGARCH}" == "any" ]; then
	for ARCHI in ${ANYARCH[@]}; do
		ln -sf ../any/${PACKAGE}{,.sig} ${REPODIR}/${ARCHI}/
	done
fi

for ARCHI in ${ANYARCH[@]}; do
	FILE="$(basename "${PACKAGE}")"

	if ! repo-add --verify --key "${GPGKEY}" --sign ${REPODIR}/${ARCHI}/${REPONAME}.db.tar.gz ${REPODIR}/${ARCHI}/${FILE}; then
		echo "Could not add to database file." >&2
		exit 1
	fi

	# try to link to local cache dir, but do not complain on error
	if ! ln ${REPODIR}/${ARCHI}/${FILE}{,.sig} /var/cache/pacman/pkg/ >/dev/null 2>/dev/null; then
		ln -srf ${REPODIR}/${ARCHI}/${FILE}{,.sig} /var/cache/pacman/pkg/ >/dev/null 2>/dev/null
	fi

	if ! grep -E -q "^${PKGNAME}$" ${BASEDIR}/import.${ARCHI}; then
		echo "${PKGNAME}" >> ${BASEDIR}/import.${ARCHI}
	fi
done

date +"%s" > ${REPODIR}/lastupdate

repo-sync
