17c2aad20Sopenharmony_ci# This was borrowed from https://github.com/travis-ci/travis-build/tree/master/lib/travis/build/bash
27c2aad20Sopenharmony_ci# to get around https://github.com/travis-ci/travis-ci/issues/9979. It should probably be removed
37c2aad20Sopenharmony_ci# as soon as Travis CI has started to provide an easy way to export the functions to bash scripts.
47c2aad20Sopenharmony_ci
57c2aad20Sopenharmony_citravis_jigger() {
67c2aad20Sopenharmony_ci  local cmd_pid="${1}"
77c2aad20Sopenharmony_ci  shift
87c2aad20Sopenharmony_ci  local timeout="${1}"
97c2aad20Sopenharmony_ci  shift
107c2aad20Sopenharmony_ci  local count=0
117c2aad20Sopenharmony_ci
127c2aad20Sopenharmony_ci  echo -e "\\n"
137c2aad20Sopenharmony_ci
147c2aad20Sopenharmony_ci  while [[ "${count}" -lt "${timeout}" ]]; do
157c2aad20Sopenharmony_ci    count="$((count + 1))"
167c2aad20Sopenharmony_ci    echo -ne "Still running (${count} of ${timeout}): ${*}\\r"
177c2aad20Sopenharmony_ci    sleep 60
187c2aad20Sopenharmony_ci  done
197c2aad20Sopenharmony_ci
207c2aad20Sopenharmony_ci  echo -e "\\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"${*}\"${ANSI_RESET}\\n"
217c2aad20Sopenharmony_ci  kill -9 "${cmd_pid}"
227c2aad20Sopenharmony_ci}
237c2aad20Sopenharmony_ci
247c2aad20Sopenharmony_citravis_wait() {
257c2aad20Sopenharmony_ci  local timeout="${1}"
267c2aad20Sopenharmony_ci
277c2aad20Sopenharmony_ci  if [[ "${timeout}" =~ ^[0-9]+$ ]]; then
287c2aad20Sopenharmony_ci    shift
297c2aad20Sopenharmony_ci  else
307c2aad20Sopenharmony_ci    timeout=20
317c2aad20Sopenharmony_ci  fi
327c2aad20Sopenharmony_ci
337c2aad20Sopenharmony_ci  local cmd=("${@}")
347c2aad20Sopenharmony_ci  local log_file="travis_wait_${$}.log"
357c2aad20Sopenharmony_ci
367c2aad20Sopenharmony_ci  "${cmd[@]}" &>"${log_file}" &
377c2aad20Sopenharmony_ci  local cmd_pid="${!}"
387c2aad20Sopenharmony_ci
397c2aad20Sopenharmony_ci  travis_jigger "${!}" "${timeout}" "${cmd[@]}" &
407c2aad20Sopenharmony_ci  local jigger_pid="${!}"
417c2aad20Sopenharmony_ci  local result
427c2aad20Sopenharmony_ci
437c2aad20Sopenharmony_ci  {
447c2aad20Sopenharmony_ci    set +e
457c2aad20Sopenharmony_ci    wait "${cmd_pid}" 2>/dev/null
467c2aad20Sopenharmony_ci    result="${?}"
477c2aad20Sopenharmony_ci    ps -p"${jigger_pid}" &>/dev/null && kill "${jigger_pid}"
487c2aad20Sopenharmony_ci    set -e
497c2aad20Sopenharmony_ci  }
507c2aad20Sopenharmony_ci
517c2aad20Sopenharmony_ci  if [[ "${result}" -eq 0 ]]; then
527c2aad20Sopenharmony_ci    echo -e "\\n${ANSI_GREEN}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}"
537c2aad20Sopenharmony_ci  else
547c2aad20Sopenharmony_ci    echo -e "\\n${ANSI_RED}The command ${cmd[*]} exited with ${result}.${ANSI_RESET}"
557c2aad20Sopenharmony_ci  fi
567c2aad20Sopenharmony_ci
577c2aad20Sopenharmony_ci  echo -e "\\n${ANSI_GREEN}Log:${ANSI_RESET}\\n"
587c2aad20Sopenharmony_ci  cat "${log_file}"
597c2aad20Sopenharmony_ci
607c2aad20Sopenharmony_ci  return "${result}"
617c2aad20Sopenharmony_ci}
62