#!/bin/bash
#
# collect the SHAs used in the latest builds to determine if we've built everything upstream already

# compare https://git.eclipse.org/c/jeetools/webtools.javaee.git/commit/?h=master or ?h=R3_9_maintenance
# <tr><th>commit</th><td colspan='2' class='sha1'><a href='/c/jeetools/webtools.javaee.git/commit/?id=7500821ec81657bafc1c6411d79547266d7befb8'>7500821ec81657bafc1c6411d79547266d7befb8</a> (<a href='/c/jeetools/webtools.javaee.git/patch/?id=7500821ec81657bafc1c6411d79547266d7befb8'>patch</a>)</td></tr>

# with  https://ci.eclipse.org/webtools/view/webtools_R3_10/job/webtools-javaee_R3_10/lastStableBuild/api/xml?xpath=//lastBuiltRevision/SHA1
# <SHA1>7500821ec81657bafc1c6411d79547266d7befb8</SHA1>

norm="\033[0;39m"
green="\033[1;32m"
red="\033[1;31m"

branch=master
quiet=0 # flag which only returns status of 0/"" (if pass) or 1 (if fail)
projects="common servertools jsdt sourceediting javaee dali jsf webservices"

# read commandline args
while [[ "$#" -gt 0 ]]; do
  case $1 in
    '-b') branch="$2"; shift 1;;
    '-q') quiet=1; shift 0;;
    '-nc') red=$norm; green=$norm; shift 0;; # disable colour
    *) projects="$projects $1";;
  esac
  shift 1
done

if [[ ! $branch ]]; then 
  echo "branch is not set!"; exit 1
fi
if [[ ! $projects ]]; then 
  echo "no project(s) selected!"; exit 1
fi

log () 
{
	if [[ $quiet == 0 ]]; then echo -e "$1"; fi
}
logn () 
{
	if [[ $quiet == 0 ]]; then echo -e -n "$1"; fi
}

returnCode=0
for d in ${projects}; do 
  if [[ ${d} == "common" ]]; then 
    gitURL="http://git.eclipse.org/c/webtools-common/webtools.common.git/commit/?h=${branch}"
  elif [[ ${d} == "javaee" ]]; then
    gitURL="https://git.eclipse.org/c/jeetools/webtools.javaee.git/commit/?h=${branch}"
  else
    gitURL="https://git.eclipse.org/c/${d}/webtools.${d}.git/commit/?h=${branch}"
  fi
  jobURL="https://ci.eclipse.org/webtools/view/webtools_R3_10/job/webtools-${d}_R3_10/lastStableBuild/api/xml?xpath=//lastBuiltRevision/SHA1"

  jobSHA=$(wget -q ${jobURL} -O- | sed -e "s#.*<SHA1>\(.\+\)</SHA1>.*#\1#")
  logn "$d :: $jobSHA"
  gitSHA=$(wget -q ${gitURL} -O- | grep "<th>commit</th>" | sed -e "s#.*?id=\(.\+\)'>.*#\1#")
  if [[ ${gitSHA} !=  ${jobSHA} ]]; then 
    returnCode=1
    log " :: ${red}ERROR${norm}"
    if [[ ${gitSHA} ]]; then
      log ": $gitSHA"
    else
      log ": $gitURL"
    fi
  else
    log " :: ${green}OK${norm}"
  fi
done

if [[ ${returnCode} != "0" ]]; then 
  echo ${returnCode}
  exit ${returnCode}
fi