#!/usr/bin/env bash

. "test/testenv.sh"
set -e

SHUTDOWN_LFS=no
SHOW_LOGS=yes
TESTS=( "$@" )

atexit() {
  res=${1:-$?}
  SHUTDOWN_LFS=yes
  if [ "$res" = "0" ]; then
    SHOW_LOGS=no
  fi

  if [ "$SHOW_LOGS" = "yes" ] && [ "$VERBOSE_LOGS" = "1" ]; then
    if [ -s "$REMOTEDIR/gitserver.log" ]; then
      echo ""
      echo "gitserver.log:"
      cat "$REMOTEDIR/gitserver.log"
    fi

    echo ""
    echo "env:"
    env
  fi

  shutdown
  exit $res
}

trap "atexit" EXIT

if [ -s "$LFS_URL_FILE" ]; then
  SHOW_LOGS=no
  echo "$LFS_URL_FILE still exists!"
  echo "Confirm other tests are done, and run:"
  echo "  $ curl $(cat "$LFS_URL_FILE")/shutdown"
  exit 1
fi

setup

parallel=${GIT_LFS_TEST_MAXPROCS:-4}

echo "Running this maxprocs=$parallel"
echo

if [ ${#TESTS[@]} -eq 0 ]
then
  testfiles=(test/test-*.sh)
else
  for ((i=0; i<${#TESTS[@]}; i++)); do
    testfiles[i]=test/test-${TESTS[i]}.sh
  done
fi

for file in "${testfiles[@]}"; do
  echo "0$(cat .$(basename $file).time 2>/dev/null || true) $file"
done | sort -rnk1 | awk '{ print $2 }' | xargs -I % -P $parallel -n 1 /bin/bash % --batch
