#!/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"
CANDIDATES="$CANDIDATES postgresql-8.3"
CANDIDATES="$CANDIDATES postgresql-8.4"
CANDIDATES="$CANDIDATES postgresql-9.1"
CANDIDATES="$CANDIDATES postgresql-9.4"
CANDIDATES="$CANDIDATES postgresql-9.6"

case "$PIUPARTS_DISTRIBUTION_NEXT" in
	jessie)
		CANDIDATES="$CANDIDATES mysql-server-5.5"
		;;
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

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

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

if [ -n "$PACKAGES" ]
then
	echo "Upgrading ${PACKAGES# } early"
	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 -y install postgresql-${to}
	fi

	if is_installed postgresql-${from} && is_installed postgresql-${to}
	then
		echo ""
		echo "Updating 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
		;;
	jessie:stretch)
		upgrade_pg_cluster 9.4 9.6
		;;
	jessie:sid)
		upgrade_pg_cluster 9.4 9.6
		;;
esac

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