#!/bin/sh
set -e

log_debug() {
	echo "Debug: piuparts exception for package $PIUPARTS_OBJECTS"
}

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
}

dbconfig_enable_purge()
{
	log_debug
	echo "$1 $1${2+/$2}/dbconfig-remove boolean true" | debconf-set-selections
	echo "$1 $1${2+/$2}/purge boolean true" | debconf-set-selections
}

if [ "$PIUPARTS_DISTRIBUTION_NEXT" = "squeeze" ]; then

	case ${PIUPARTS_OBJECTS%%=*} in
		crm114)
			#562946
			log_debug
			echo "crm114 crm114/forceupgrade boolean true" | debconf-set-selections
			;;
		slapd|\
		slapd-dbg)
			# squeeze postinst wants to restore a backup from lenny that was never created
			log_debug
			dpkg --purge slapd slapd-dbg
			;;
	esac

	# squeeze does not properly upgrade adduser.conf, so generate a new one
	if [ -f /etc/adduser.conf ]; then
		md5="$(md5sum /etc/adduser.conf | awk '{ print $1 }')"
		# 5b577c9cb18e4852fc7e45830d230ec1: adduser/lenny pristine
		# 28928669e36f1ab616dfda39af3d79a7: adduser/lenny + dpsyco-lib/lenny
		if	[ "$md5" = "5b577c9cb18e4852fc7e45830d230ec1" ] || \
			[ "$md5" = "28928669e36f1ab616dfda39af3d79a7" ]
		then
			rm -fv /etc/adduser.conf
		fi
	fi

	# prevent disappearance of /etc/udev/rules.d/
	if is_installed libticables3; then
		log_debug
		touch /etc/udev/rules.d/.piuparts.dummy
	fi

	# isc-dhcp-server.postinst unconditionally overwrites conffile /etc/dhcp/dhcpd.conf
	if is_installed dhcp3-server; then
		log_debug
		rm -fv /etc/dhcp3/dhcpd.conf
	fi

fi

if [ "$PIUPARTS_DISTRIBUTION_NEXT" = "wheezy" ]; then

	case ${PIUPARTS_OBJECTS%%=*} in
		cnews)
			# dpkg 1.16 does not like the bad cnews version number cr.g7-40.4
			# cnews was removed after lenny
			log_debug
			dpkg --purge cnews
			;;
		lcl-utils|\
		lcl)
			# WORKSAROUND #696075: lcl-utils: directory vs. symlink mess after squeeze => wheezy upgrade: /etc/lazarus
			# the renaming was performed in the postinst of lcl-utils-0.9.30.4,
			# which was not the owner of the old /etc/lazarus,
		        # therefore dpkg does never forget about the old conffiles
			log_debug
			if [ -d /etc/lazarus ] && [ ! -L /etc/lazarus ]; then
				mv -v /etc/lazarus /etc/lazarus.bak
			fi
			;;
		nfsbooted)
			# sysv-rc fails migration to dependency based boot sequence if nfsbooted is installed
			# nfsbooted was removed after lenny
			log_debug
			dpkg --purge nfsbooted
			;;
		pdns-backend-mysql)
			# WORKSAROUND #698562: upgrade from squeeze => wheezy fails if database has not been created before the upgrade
			log_debug
			dpkg --purge pdns-backend-mysql
			;;
		pdns-backend-pgsql)
			# WORKSAROUND #698562: upgrade from squeeze => wheezy fails if database has not been created before the upgrade
			log_debug
			dpkg --purge pdns-backend-pgsql
			;;
	esac

	# E: Could not perform immediate configuration on ...
	#645713, #677805, #706641
	case ${PIUPARTS_OBJECTS%%=*} in
		bug-buddy|\
		gnome|\
		gnome-accessibility|\
		gnome-core|\
		gnome-dbg|\
		gnome-desktop-environment|\
		libgd-text-perl|\
		open-cobol|\
		python-sugar-toolkit-0.86|\
		speechd-el|\
		sucrose-0.86|\
		sugar-browse-activity-0.86|\
		sugar-chat-activity-0.86|\
		sugar-read-activity-0.86)
			log_debug
			echo "Disabling APT::Immediate-Configure"
			echo 'APT::Immediate-Configure "No";' >> /etc/apt/apt.conf.d/piuparts-disable-immediate-configure
			;;
	esac

	# WORKSAROUND #655969: lirc: prompting due to modified conffiles which where not modified by the user: /etc/lirc/hardware.conf
	if [ -f /etc/lirc/hardware.conf ]; then
		log_debug
		sed -i '/^DRIVER=/s/.*/DRIVER="UNCONFIGURED"/' /etc/lirc/hardware.conf
	fi

fi

if [ "$PIUPARTS_DISTRIBUTION_NEXT" = "jessie" ]; then

	case ${PIUPARTS_OBJECTS%%=*} in
		*cyrus*)
			# something was not working properly during the upgrade from 2.2 to 2.4
			if is_installed cyrus-common && [ ! -d /var/lib/cyrus/db ]; then
				echo "FIXING missing /var/lib/cyrus/db"
				cyrus-makedirs --cleansquat
			fi
			;;
		debian-edu-archive-keyring|\
		debian-ports-archive-keyring|\
		emdebian-archive-keyring|\
		emdebian-grip-server)
			# https://bugs.debian.org/687611
			log_debug
			for keyring in /etc/apt/trusted.gpg.d/*.gpg~
			do
				if [ -f "${keyring}" ]; then
					mv -v "${keyring}" "${keyring%~}"
				fi
			done
			;;
		ekeyd-uds)
			# ekeyd-uds was removed after squeeze, maintainer scripts are incompatible with udev/jessie
			log_debug
			dpkg --purge ekeyd-uds
			;;
		otrs2)
			#707075: cannot automatically upgrade from wheezy to jessie due to mysql storage engine change
			if is_installed mysql-server; then
				log_debug
				dbconfig_enable_purge otrs2
				dpkg --purge otrs2
			fi
			;;
	esac

	#825650: libreoffice-common: prompting due to modified conffiles which were not modified by the user: /etc/libreoffice/sofficerc
	# migration did not work properly while upgrading from squeeze to wheezy,
	# gets messed up further while upgrading from wheezy to jessie,
	# eventually leading to problems while upgrading from jessie to stretch
	if is_installed openoffice.org-common; then
		if [ -f /etc/openoffice/sofficerc ] && [ -f /etc/libreoffice/sofficerc ]; then
			log_debug
			for file in sofficerc soffice.sh psprint.conf
			do
				if [ -f /etc/openoffice/$file ] && [ -f /etc/libreoffice/$file ]; then
					rm -v /etc/openoffice/$file
				fi
			done
		fi
	fi

fi

if [ "$PIUPARTS_DISTRIBUTION" = "stretch" ]; then

	case ${PIUPARTS_OBJECTS%%=*} in
		design-desktop*)
			#850948: needrestart/stretch may hang during upgrade
			log_debug
			dpkg-divert --rename /usr/lib/needrestart/apt-pinvoke
			;;
	esac

fi
