#!/bin/sh -e
# preinst script for perforce-swarm
#
# see: dh_installdeb(1)

# Summary of how this script can be called:
# <new-preinst> 'install'
# <new-preinst> 'install'       <old-version>
# <new-preinst> 'upgrade'       <old-version>
# <old-preinst> 'abort-upgrade' <new-version>
#
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

ME="${0##*/}"
#echo "###########################"
#echo "[$ME] [$*]"

THISPKG="helix-swarm"
PERFORCE_ROOT="/opt/perforce"
PERFORCE_CFGDIR="$PERFORCE_ROOT/etc"
SWARM_ROOT="$PERFORCE_ROOT/swarm"
SWARM_DATADIR="$SWARM_ROOT/data"
SWARM_SBINDIR="$SWARM_ROOT/sbin"
SWARM_CONFIG="$SWARM_DATADIR/config.php"

APACHE_SITESDIR="/etc/apache2/sites-available"
SWARM_VHOST="$APACHE_SITESDIR/perforce-swarm-site.conf"
APACHE_USER="www-data"
APACHE_GROUP="$APACHE_USER"

CRON_DIR="/etc/cron.d"
CRON_SCRIPT="$CRON_DIR/helix-swarm"
CRON_SCRIPT_OLD="$CRON_DIR/perforce-swarm"
CRON_CONFIG="$PERFORCE_CFGDIR/swarm-cron-hosts.conf"

PHPINI_DIR="/etc/php5/conf.d"
P4PHP_INI="${PHPINI_DIR}/perforce.ini"

check_old_cron()
{
    if [ -r $CRON_SCRIPT_OLD ]; then
	echo "$THISPKG: Removing obsoleted cronfile..."
	rm $CRON_SCRIPT_OLD
    fi
    return 0
}


upgrade_20142()
{
    echo "$THISPKG: Handling upgrade exceptions for Swarm 2014.2..."

    upgrade_good=0
    while true; do
        # HACK: Recreate the cron job in its original 2014.2 form so it can be upgraded without user input
        cat << __CRON_SCRIPT__ > "$CRON_SCRIPT"
#
# Regular cron job for the perforce-swarm-rXX.Y package
#
* * * * * nobody [ -x /usr/bin/wget ] && /usr/bin/wget -qO /dev/null -T5 http://localhost/queue/worker

__CRON_SCRIPT__

        if [ ! -r "$SWARM_CONFIG" ]; then
            error_msg="Could not find Swarm config file [$SWARM_CONFIG]"
            break
        fi

        # Obtain the Swarm hostname to create Swarm cron job
        swarm_hostname="$(\
            egrep -v "^\s*(#|//).*" "$SWARM_CONFIG" |
                tr -d '\n' |
                sed -rne "s#.*['\"]environment['\"]\s*=>\s*array\s*\(\s*['\"]hostname['\"]\s*=>\s*['\"]([^'\"]*)['\"].*#\1#p" \
            )"

        if [ -z "$swarm_hostname" ]; then
            error_msg="Could not obtain Swarm hostname from Swarm config file [$SWARM_CONFIG]"
            break
        fi
        echo "$THISPKG: -obtained Swarm hostname from Swarm config file: [$swarm_hostname]"

        mkdir -p "$(dirname "$CRON_CONFIG")"
        cat << __CRON_CONFIG__ > "$CRON_CONFIG"
# Perforce Swarm cron configuration
#
# Format (one per line):
# [http[s]://]<swarm-host>[:<port>]
#
$swarm_hostname
__CRON_CONFIG__
        echo "$THISPKG: -wrote Swarm cron config [$CRON_CONFIG]"

        upgrade_good=1
        break
    done

    if [ $upgrade_good -ne 1 ]; then
        cat << __UPGRADE_WARNING__

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!
!! $THISPKG: WARNING: Unable to automatically upgrade from $from_version_major
!! Problem:
!! $error_msg
!!
!! This means you will need to reconfigure Swarm after the upgrade of
!! the package completes.
!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

__UPGRADE_WARNING__
    fi

    return 0
}

case "$1" in
    install)
	check_old_cron
    ;;

    upgrade)
        from_version="$2"
        from_version_major="${from_version%%-*}"
	echo "$THISPKG: Upgrading from $from_version"
	check_old_cron
        [ "$from_version_major" = "2014.2" ] && upgrade_20142
    ;;

    abort-upgrade)
    ;;

    *)
        echo "$ME called with unknown argument [$1]" >&2
        exit 1
    ;;
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0