#!/bin/bash # ----------------------------------------------------------------------------- # Launches Buck daemon if not already running and requests Buck task execution. # ----------------------------------------------------------------------------- BUCK_DAEMON=$1 TASK=${2:-unspecified} DATA=${3} # TODO: Figure out how to parametrize better BUCK_PROPS="-Dcheckstyle.config=$4 -Dcheckstyle.suppressions=$5" PORT_FILE="$1.port" function ppid() { ps -p ${1:-$$} -o ppid= -o pid= -o comm= } function buck_pid() { BUCK_PID=($(ppid)) while [ ${BUCK_PID[0]} -ne 0 ]; do BUCK_PID=($(ppid $BUCK_PID)) if [ "${BUCK_PID[2]}" == "buck" ]; then # use parent PID of buck echo ${BUCK_PID[0]} return fi if [ "${BUCK_PID[2]}" == "buckd" ] || [[ "${BUCK_PID[2]}" == *"python"* ]]; then # use PID of buckd or python echo ${BUCK_PID[1]} return fi done # fallback last read PID echo ${BUCK_PID[1]} } function port() { cat $PORT_FILE 2>/dev/null || echo 0 } function check_socket() { nc localhost $(port) < /dev/null 2>/dev/null return $? } # check to see if buck daemon is running; if not, start it if ! check_socket; then # Starting buck daemon... #FIXME change to /dev/null if/when we are confident nohup java $BUCK_PROPS -jar $BUCK_DAEMON $PORT_FILE $(buck_pid) >>/tmp/buck.daemon 2>&1 & TRIES=20 i=0 # Wait for buck daemon to start for 2 seconds while [ $i -lt $TRIES ]; do if check_socket; then CONNECTED=true break fi let i=i+1 sleep 0.1 done if [ -z "$CONNECTED" ]; then echo "Failed to start buck daemon" exit 3 fi fi # run the actual buck daemon client OUT=$((printf "%s\n" $TASK; cat $DATA) | nc localhost $(port)) if [ $? -ne 0 ]; then echo "Error connecting to buck daemon server" exit 2 fi if [ -n "$OUT" ]; then printf "$OUT" exit 1 fi