#!/bin/bash declare BrokerPid= declare BrokerCfg= declare TmpP4ROOT=$HMS_TEST_HOME/tmp/.p4root declare -i Debug=1 function msg () { echo -e "$*"; } function dbg () { [[ $Debug -eq 1 ]] || return; echo -e "DEBUG: $*" >&2; } function cmd () { msg "Executing: $*"; $*; return $?; } function bail () { msg "\\nError: ${1:-Unknown Error}\\n"; exit ${2:-1}; } function get_broker_pid () { pid=$(ps -ef | grep "$P4BROKERBIN" | grep -v " grep " | \ awk '{print $2}' | head -1) echo $pid } source ./env.sh BrokerCfg="$HMS_TEST_HOME/broker.cfg" case ${1:-status} in (start) if [[ -r "$BrokerCfg" ]]; then msg "Using existing $BrokerCfg." else msg "Generating $BrokerCfg from template." if ! sed -e "s:__HMS_SCRIPTS__:$HMS_SCRIPTS:g" -e "s:__P4PORT__:$P4PORT:g" -e "s:__P4BROKERPORT__:$P4BROKERPORT:g" -e "s:__HMS_TEST_HOME__:$HMS_TEST_HOME:g" "${BrokerCfg}.t" > "$BrokerCfg"; then bail "Failed to generate broker config." fi fi cd "$HMS_TEST_HOME" || bail "Failed to cd to $HMS_TEST_HOME." cmd "$P4BROKERBIN" -c "$BrokerCfg" -q -d # Start a helper p4d. It does nothing, but needs to be running, # otherwise the broker can't do anything except a 'reject' or # 'redirect' action. unset P4JOURNAL P4AUDIT P4DEBUG P4CHANGE P4AUTH P4LOG rm -rf $TmpP4ROOT mkdir -p $TmpP4ROOT cmd p4d -r $TmpP4ROOT -p $P4PORT -q --daemonsafe --pid-file ;; (stop) if [[ -r "$TmpP4ROOT/server.pid" ]]; then msg "Killing helper p4d." cmd kill $(cat $TmpP4ROOT/server.pid) else msg Helper p4d was not running. fi BrokerPid=$(get_broker_pid) if [[ -n "$BrokerPid" ]]; then msg "Killing broker." cmd kill $BrokerPid else msg Broker was not running. fi ;; (status) if [[ -r "$TmpP4ROOT/server.pid" ]]; then msg "Helper p4d appears to be running." else msg "Helper p4d is not running." fi BrokerPid=$(get_broker_pid) if [[ -n "$BrokerPid" ]]; then msg Broker is running as pid $BrokerPid. else msg Broker is not running. fi ;; (clean) msg "Removing: $TmpP4ROOT" rm -rf "$TmpP4ROOT" msg "Removing: $BrokerCfg" rm -f "$BrokerCfg" ;; (*) msg "\\nUsage:\\n\\t${0##*/} {start|stop|status}\\n" ;; esac