#!/bin/bash

set -eu

debci_base_dir=$(readlink -f $(dirname $(readlink -f $0))/../..)
cd $debci_base_dir
. lib/environment.sh
. lib/functions.sh

while [ "$1" != '--' ]; do
  shift
done
shift

if [ -z "${WORKER_START_TIMESTAMP:-}" ]; then
  echo "E: WORKER_START_TIMESTAMP not defined"
  exit 1
fi

whitelist="${debci_config_dir}/whitelist"
seed_list="${debci_config_dir}/seed_list"

if [ -e "${whitelist}" ]; then
  echo "W: whitelist is deprecated, rename it to seed_list instead" >&2
  seed_list="$whitelist"
fi

requested_packages="$@"
if [ -z "$requested_packages" ]; then
  requested_packages=$(cat "$seed_list")
fi

shopt -s nullglob
for pkg in $requested_packages; do
  while true; do
    # wait for the latest job for the given package to be updated after the
    # start time of the current running worker
    last_job="$(ruby -Ilib -rdebci/db -e "puts ActiveRecord::Base.connection.execute(\"SELECT MAX(updated_at) AS last from jobs JOIN packages ON (packages.id = jobs.package_id) WHERE jobs.status IS NOT NULL AND packages.name = '${pkg}'\")[0]['last']")"
    if [ -n "${last_job}" ]; then
      stamp=$(date -d"${last_job}" +%s)
      if [ $stamp -ge "${WORKER_START_TIMESTAMP}" ]; then
        break
      fi
    fi
    sleep ${debci_poll_interval:-1}
  done
done

debci update
