#!/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 STAT_PARM="-c %Y" [[ "$(uname -s)" = "Darwin" ]] && STAT_PARM="-f %m" # Check repos for updates for REPO in ${REPOS[@]}; do if [ $(( $(date +%s) - $(stat ${STAT_PARM} .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