#!/bin/bash
#
# This script gets ports from an overlay that need to be updated
#
# Requeriments: You need 'ports' and 'prt-get' installed
# Note: Before execute this script you should be run 'ports -u' to be sure
# you're up to date

checkOverlayUpdates() {

  overlay=$1

  # check for a valid overlay
  case $overlay in
    core-arm|opt-arm|xorg-arm|contrib-arm) ;;
    cubieboard-arm|cubieboard2-arm|efikamx-arm|raspberrypi-arm) ;;
    *)
      echo "Error, unsupported overlay: $overlay"
      exit 1
      ;;
  esac

  # get a list of ports in the overlay
  overlay_path=$(grep 'destination' /etc/ports/$overlay.{rsync,httpup} 2>/dev/null | cut -d'=' -f2)
  overlay_ports=$(find $overlay_path -type f -name 'Pkgfile' -exec dirname {} \; | sed "s|$overlay_path/||g")

  # for device overlay repos we need to know the upstream repo/port
  for port in $overlay_ports; do
    # get upstream repo/port
    for repo in core opt xorg; do
      repo_path=$(grep 'destination' /etc/ports/$repo.{rsync,httpup} 2>/dev/null | cut -d'=' -f2)
      u_repo=$(basename $(dirname $(prt-get --no-std-config --config-prepend="prtdir $repo_path" path $port 2>/dev/null) 2>/dev/null) 2>/dev/null)
      # breaks if there is an upstream repo
      [ ! -z $u_repo ] && break
    done
    # show differences between upstream port and overlayed port
    if [ ! -z $u_repo ]; then
      # get versions
      . $repo_path/$port/Pkgfile
      u_port_version=$version-$release
      . $overlay_path/$port/Pkgfile
      o_port_version=$version-$release
      if [ "$u_port_version" != "$o_port_version" ]; then
	printf "%-20s %-20s %-s\n" $port "$o_port_version" "$u_port_version ($u_repo)" >> $TMP_FILE
      fi
    fi
  done

  # print results
  if [ "$(wc -l $TMP_FILE | cut -d' ' -f1)" != "0" ]; then
    echo "Results for overlay: $overlay"
    printf "%-20s %-20s %-s\n" "PORT" "VERSION" "UPSTREAM"
    cat $TMP_FILE && : > $TMP_FILE
    echo
  fi
}

if [ $# -lt 1 ]; then
  echo "Usage: $(basename $0) [overlay_repo]"
  exit 1
fi

for TARGET in $@; do
  TMP_FILE=$(mktemp)
  checkOverlayUpdates $TARGET
  rm -f $TMP_FILE
done

# End of file