#!/bin/sh
#
# p4d   This shell script take care of starting and stopping
#       p4d (Perforce Daemon).
#
# chkconfig: 345 80 20
# description: Start the perforce daemon and the review daemon

# Source function library
. /etc/init.d/functions

# Source networking configuration
. /etc/sysconfig/network

# Check that networking is up
[ ${NETWORKING} = "no" ] && exit 0

# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]; then
    SU=runuser
else
    SU=su
fi

# set some important perforce variables
P4D=/usr/sbin/p4d
P4REVIEW=/usr/sbin/p4review
P4LOG=/var/log/p4d/p4d.log
P4REVIEWLOG=/var/log/p4d/p4review.log
P4ROOT=/rcs/perforce/root
P4USER=perforce

RETVAL=0

start() {
    # export the important variables
    export P4ROOT P4USER
    # Start daemons
    echo -n "Starting p4d: "
    daemon --user $P4USER $P4D -d -v server=3 -L $P4LOG -r $P4ROOT
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        echo -n "Starting p4review: "
        $SU -s /bin/bash - $P4USER -c "$P4REVIEW > $P4REVIEWLOG 2>&1 < /dev/zero &"
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/p4d
    fi
    return $RETVAL
}

stop() {
    # Stop daemons
    echo -n "Shutting down p4review: "
    killproc p4review
    RETVAL=$?
    echo
    echo -n "Shutting down p4d: "
    killproc p4d
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/p4d
    return $RETVAL
}

checkpoint() {
    # create a perforce checkpoint
    echo -n "Checkpoint p4d: "
    $SU -s /bin/bash - $P4USER -c "$P4D -r $P4ROOT -jc -z" >> $P4LOG 2>&1 < /dev/null
    RETVAL=$?
    echo "Done"
    return $RETVAL
}


# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  checkpoint)
        checkpoint
        ;;
  status)
        status p4d
        RETVAL=$?
        ;;
  restart|reload)
        stop
        start
        RETVAL=$?
        ;;
  condrestart)
        if [ -f /var/lock/subsys/p4d ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
  *)
        echo $"Usage: $0 {start|stop|checkpoint|restart|condrestart|status}"
        exit 1
esac

exit $RETVAL