#!/bin/bash

log="$(portageq envvar PORTAGE_TMPDIR)/portage/*/*/temp/build.log"
cmd="${SB:-tail -f}"
c=0

die() { echo -e "$*" >&2; exit 1; }

if [[ $1 = -h || $1 = --help ]]; then
  echo "Script to follow log of running portage builds"
  echo
  echo "Usage: ${0##*/}         # see running builds"
  echo "       ${0##*/} N       # follow build #N"
  echo "       ${0##*/} --fetch # follow emerge-fetch.log"
  echo "       ${0##*/} --help  # show this help"
  echo
  echo "Use environment variable SB to override the default cmd ($cmd)"
elif [[ $1 = -f || $1 = --fetch ]]; then
  log="$(portageq envvar EMERGE_LOG_DIR)"
  log="${log:=$(portageq envvar EPREFIX)/var/log}/emerge-fetch.log"
  [[ -f $log ]] || die "Could open '$log'"
  exec $cmd $log
elif [[ $(echo $log) = "$log" ]]; then
  echo "No running build found (try '${0##*/} --help')"
elif [[ ! $1 ]]; then
  echo "Running builds - use '${0##*/} NUMBER' to select"
  for i in $log; do
    [[ $i =~ ^${log%%\**}([^/]*)/([^/]*)${log##*\*}$ ]] || continue
    echo -e "$((++c))\t${BASH_REMATCH[2]}\t(${BASH_REMATCH[1]})"
  done
else
  [[ -z ${1//[0-9]} && $1 -gt 0 ]] || die "Argument should be a number greater 0"
  for i in $log; do
    [[ $i =~ ^${log%%\**}([^/]*)/([^/]*)${log##*\*}$ ]] || continue
    [[ $((++c)) -eq $((10#$1)) ]] || continue
    [[ -f ${i} ]] || die "Build number $1 was gone in the meanwhile"
    echo -ne "\033]0;Viewing: ${BASH_REMATCH[2]}\t(${BASH_REMATCH[1]})\007"
    exec $cmd $i
  done
  die "Build number $1 not found (there are only $((c--)) build(s) running)" 
fi
