#!/bin/sh
set -e

# Skip while creating the reference chroot.
if [ "$PIUPARTS_PHASE" = "" ]; then
	exit 0
fi

is_installed()
{
	local pkg="$1"
	dpkg-query -s "$pkg" >/dev/null 2>&1 || return 1
	local status="$(dpkg-query -W -f '${Status}' $pkg)"
	test "$status" != "unknown ok not-installed" || return 1
	test "$status" != "deinstall ok config-files" || return 1
	return 0
}

retry_configure_pending()
{
	echo ""
	echo "Upgrade didn't go smooth, trying dpkg --configure --pending"
	dpkg --configure --pending
}


CANDIDATES=
CANDIDATES="$CANDIDATES default-mysql-server"
#CANDIDATES="$CANDIDATES mysql-server"
CANDIDATES="$CANDIDATES postgresql"

case "$PIUPARTS_DISTRIBUTION_NEXT" in
	buster)
		: # no mysql-server in buster
		;;
	*)
		CANDIDATES="$CANDIDATES mysql-server"
		;;
esac

PACKAGES=
RETRY="false"

# early upgrade runs into even more trouble for some packages ...
case ${PIUPARTS_OBJECTS%%=*} in
	med-practice|audiolink)
		CANDIDATES=""
		;;
	redmine)
		CANDIDATES=""
		;;
esac

if [ "$PIUPARTS_DISTRIBUTION_NEXT" = "stretch" ]; then
	case ${PIUPARTS_OBJECTS%%=*} in
		bacula-director-mysql|\
		bacula-director-mysql-dbg)
			# (new) transitively recommended package mariadb-server-x.y gets
			# configured (and the server started) too late (after ourselves)
			RETRY="retry_configure_pending"
			;;
	esac
fi

for pkg in $CANDIDATES
do
	if is_installed "$pkg"
	then
		PACKAGES="$PACKAGES $pkg"
	fi
done

test ! -x /usr/bin/pg_lsclusters || pg_lsclusters

did_apt_get_update=
apt_get_update()
{
	if [ -z "$did_apt_get_update" ]
	then
		apt-get update
		did_apt_get_update=true
	fi
}

if [ -n "$PACKAGES" ]
then
	echo "Upgrading early: ${PACKAGES# }"
	apt_get_update
	apt-get -y install $PACKAGES || $RETRY
fi

upgrade_pg_cluster()
{
	local from=$1
	local to=$2

	if ! is_installed postgresql-${from}
	then
		return 0
	fi

	if ! is_installed postgresql-${to}
	then
		echo ""
		echo "Installing: postgresql-${to}"
		apt_get_update
		apt-get -y install postgresql-${to}
	fi

	if is_installed postgresql-${from} && is_installed postgresql-${to}
	then
		if [ "$3" = "--restart-first" ]; then
			echo ""
			echo "Restarting PostgreSQL (#882409)..."
			invoke-rc.d postgresql restart
		fi
		echo ""
		echo "Upgrading PostgreSQL Cluster from ${from} to ${to}"
		pg_dropcluster ${to} main --stop
		pg_upgradecluster -v ${to} ${from} main
		pg_dropcluster ${from} main
	fi
}

case "${PIUPARTS_DISTRIBUTION}:${PIUPARTS_DISTRIBUTION_NEXT}" in
	lenny:squeeze)
		upgrade_pg_cluster 8.3 8.4
		;;
	squeeze:wheezy)
		upgrade_pg_cluster 8.4 9.1
		;;
	wheezy:jessie)
		upgrade_pg_cluster 9.1 9.4 --restart-first
		;;
	jessie:stretch)
		upgrade_pg_cluster 9.4 9.6
		;;
	stretch:buster)
		upgrade_pg_cluster 9.6 10
		;;
	stretch:sid)
		upgrade_pg_cluster 9.6 10
		;;
esac

test ! -x /usr/bin/pg_lsclusters || pg_lsclusters
