#!/bin/bash
set -euo pipefail

DEBUG=${DEBUG:-false}
FETCH_INTERVAL=${FETCH_INTERVAL:-3600}
REPOS=( public secret )

# Print debug messages if enabled by ${DEBUG}
function debug {
  [[ "${DEBUG}" = "false" ]] && return
  echo "$@" >&2
}

# Wrap git to work with git-dir and work-tree being in other locations
function gwrap {
  hub --git-dir=${HOME}/.cfg/${REPO} --work-tree=${HOME} $@
}

# Ensure we're connected to network before acting
if ! ( ping -q -c 1 8.8.8.8 >/dev/null ); then
  debug "No network connection, not checking"
  exit 0
fi

# Check repos for updates
for REPO in ${REPOS[@]}; do
  if [ $(( $(date +%s) - $(stat -c %Y .cfg/${REPO}/FETCH_HEAD) )) -lt ${FETCH_INTERVAL} ]; then
    debug "Last repo fetch for '${REPO}' too new, not checking"
    continue
  fi

  gwrap fetch -q

  LOCAL=$(gwrap rev-parse HEAD)
  REMOTE=$(gwrap rev-parse FETCH_HEAD)

  if ! [[ "${LOCAL}" = "${REMOTE}" ]]; then
    echo "Config repo '${REPO}' differs from upstream"
  fi
done