diff --git a/wmake/wmakeScheduler b/wmake/wmakeScheduler index 2a2ed0fd76..a4c88624ab 100755 --- a/wmake/wmakeScheduler +++ b/wmake/wmakeScheduler @@ -57,14 +57,15 @@ lockDir=$HOME/.wmakeScheduler # count the total number of slots available and exit if [ "$1" = "-count" ] then - expr $( - for slotGroup in $WM_HOSTS - do - n=${slotGroup##*:} - if [ "$n" = "${slotGroup%%:*}" ]; then n=1; fi # missing ':' - echo "+ ${n:-1}" - done) - exit 0 + expr $( + for slotGroup in $WM_HOSTS + do + n=${slotGroup##*:} + [ "$n" = "${slotGroup%%:*}" ] && n=1 # missing ':' + echo "+ ${n:-1}" + done + ) + exit 0 fi # where to source WM_PROJECT settings in a remote shell @@ -75,25 +76,26 @@ fi sourceFoam=false # fallback command case $SHELL in */csh | */tcsh ) # [t]csh vs bash|ksh|sh - shellRc=cshrc - ;; + shellRc=cshrc + ;; *) - shellRc=bashrc - ;; + shellRc=bashrc + ;; esac # check ~/.$WM_PROJECT/$WM_PROJECT_VERSION/ # check ~/.$WM_PROJECT/ # check /etc/ -if [ "$WM_PROJECT" ]; then - +if [ "$WM_PROJECT" ] +then for i in \ $HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \ $HOME/.$WM_PROJECT \ $WM_PROJECT_DIR/etc \ ; do - if [ -f "$i/$shellRc" ]; then + if [ -f "$i/$shellRc" ] + then sourceFoam="$i/$shellRc" break fi @@ -105,7 +107,8 @@ fi # attempt to preserve the installation directory 'FOAM_INST_DIR' case $sourceFoam in */bashrc) - if [ "$FOAM_INST_DIR" ]; then + if [ "$FOAM_INST_DIR" ] + then sourceFoam='[ "$WM_PROJECT" ] || '"FOAM_INST_DIR=$FOAM_INST_DIR . $sourceFoam" else sourceFoam='[ "$WM_PROJECT" ] || '". $sourceFoam" @@ -125,25 +128,50 @@ rcmd=$(echo $* | sed -e s/\"/\'\"\'/g) # Convert WM_COLOURS into an array -declare colours +declare colourList nColours=0 for col in $WM_COLOURS do - colours[$nColours]=$col - ((nColours = $nColours + 1)) + colourList[$nColours]=$col + ((nColours = $nColours + 1)) done -# Bashism: make pipe fail early. This make sure return value of compilation -# is returned and not of colouring pipe. +# Bashism: make pipe fail early. +# This ensures the return value of the command is returned and not of the +# colouring pipe etc. set -o pipefail -# Define function to colour output by argument 1 -colourPipe(){ - if [ "$1" ]; then - (while read line; do setterm -foreground $1; echo "$line" ; done; setterm -foreground default) - else - cat - fi + +# +# colour output by argument 1 +# +colourPipe() +{ + if [ "$1" ] + then + ( + while read line + do + setterm -foreground $1 + echo "$line" + done + setterm -foreground default + ) + else + cat + fi +} + + +# +# prefix message with [HOSTNAME] +# +prefixPipe() +{ + while read line + do + echo "[$@] $line" + done } @@ -151,61 +179,60 @@ colourIndex=0 while : do - for slotGroup in $WM_HOSTS - do - # split 'host:N', but catch 'host:' and 'host' too - host=${slotGroup%%:*} - n=${slotGroup##*:} - if [ "$n" = "$host" ]; then n=1; fi # missing ':' - : ${n:=1} + for slotGroup in $WM_HOSTS + do + # split 'host:N', but catch 'host:' and 'host' too + host=${slotGroup%%:*} + n=${slotGroup##*:} + [ "$n" = "$host" ] && n=1 # missing ':' + : ${n:=1} - i=0 - while [ "$i" -lt "$n" ] - do - lockFile="$lockDir/$host:$i" - if lockfile -r0 "$lockFile" 2>/dev/null; then - if [ "$WM_COLOURS" ]; then - # Set colour - colour="${colours[$colourIndex]}" + i=0 + while [ "$i" -lt "$n" ] + do + lockFile="$lockDir/$host:$i" + if lockfile -r0 "$lockFile" 2>/dev/null + then + if [ "$nColours" -gt 0 ] + then + # Set colour and index to next colour + colour="${colourList[$colourIndex]}" + colourIndex=$(expr $colourIndex + 1) + [ "$colourIndex" -lt "$nColours" ] || colourIndex=0 - if [ "$host" = "$HOST" ]; then - eval $* 2>&1 | colourPipe "$colour" - elif [ -n "$JOB_ID" ]; then - qrsh -inherit -v PWD $host "$rcmd" - else - ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe "$colour" - fi - retval=$? - else - if [ "$host" = "$HOST" ]; then - eval $* - elif [ -n "$JOB_ID" ]; then - qrsh -inherit -v PWD $host "$rcmd" - else - ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" - fi - retval=$? - fi - - # Release lock - rm -f "$lockFile" 2>/dev/null - exit $retval + if [ "$host" = "$HOST" ]; then + eval $* 2>&1 | colourPipe "$colour" + elif [ -n "$JOB_ID" ]; then + qrsh -inherit -v PWD $host "$rcmd" + else + ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe "$colour" + fi + retval=$? + else + if [ "$host" = "$HOST" ]; then + eval $* 2>&1 | prefixPipe "$host" + elif [ -n "$JOB_ID" ]; then + qrsh -inherit -v PWD $host "$rcmd" | prefixPipe "$host" + else + ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | prefixPipe "$host" + fi + retval=$? fi - i=$(expr $i + 1) - # Cycle through colours - colourIndex=$(expr $colourIndex + 1) - if (( $colourIndex >= $nColours )); then - colourIndex=0 - fi - done - done - # Did not find any free slots. Rest a bit. - sleep 1 + # Release lock + rm -f "$lockFile" 2>/dev/null + exit $retval + fi + i=$(expr $i + 1) + done + done + # Did not find any free slots. Rest a bit. + sleep 1 done -if [ "$WM_COLOURS" ]; then - setterm -foreground default +if [ "$nColours" -gt 0 ] +then + setterm -foreground default fi #------------------------------------------------------------------------------