#!/bin/sh
#
# Choose the least-loaded machine in the queue dir
# Called with lock held
# We know that everything in this directory has space for another job

pb=$1
arch=$2
branch=$3

qdir=${pb}/${arch}/queue

cd $qdir
set *
if [ "$1" = "*" ]; then
  echo ""
  exit 1
fi


min=999999
while [ $# -gt 0 ]; do
  m=$1

  # Pull in maxjobs
  . ${pb}/${arch}/portbuild.conf
  test -f ${pb}/${arch}/portbuild.${m} && . ${pb}/${arch}/portbuild.${m}

  curjobs=$(cat $m)
  weight=$((${curjobs}*1000/${maxjobs}))

  if [ $weight -lt $min ]; then
    mach=$m
    min=$weight
  elif [ $weight -eq $min ]; then
    mach="${mach} ${m}"
  fi
  shift
done

if [ "$min" = 999999 -o -z "${mach}" ]; then
  echo ""
  exit 1
fi

# Choose highest-priority machine that is free
mach=$(echo ${mach} | tr -s ' ' '\n' | grep -F -f - ${pb}/${arch}/mlist | head -1)
if [ -z "${mach}" ]; then
	rm -f "${mach}"
	exit 1
fi

. ${pb}/${arch}/portbuild.conf
test -f ${pb}/${arch}/portbuild.${mach} && . ${pb}/${arch}/portbuild.${mach}

curjobs=$(cat $mach)
# Now that we've found a machine, register our claim in the queue
if [ "$((${curjobs}+1))" -ge "${maxjobs}" ]; then
  rm ${mach}
else
  echo $(($curjobs+1)) > ${mach}
fi

# Report to caller
echo ${mach}
exit 0
