#!/bin/bash
# updates some important repositories in my home folder (and elsewhere) that exist on multiple devices

set -eu

# Check for git
if ! command -v git > /dev/null; then
   echo "git is not installed, please install git and try again"
   exit 1
fi

# Set colors
if command -v tput > /dev/null; then
   YELLOW="$(tput setaf 3)"
   GREEN="$(tput setaf 2)"
   NC="$(tput sgr0)"
elif [ -n "$TERMUX_VERSION" ]; then
   YELLOW=""
   GREEN=""
   NC="(B"
fi

# Avoiding copy pasting this over and over
g() { git -C "$REPO" "$@"; }

# shellcheck disable=SC2016
REPO_ABBR='echo ${REPO/"$HOME"/"~"}'

# `git pull` everything mentioned in the REPOS_TO_UPDATE variable
IFS=: read -ra REPOS_TO_UPDATE_ARR <<< "${REPOS_TO_UPDATE:-}:${DOCS_DIR:-}:$HOME/bin:${NIXOS_DIR:-}:$HOME/code/faust-ideas"
for REPO in "${REPOS_TO_UPDATE_ARR[@]}"; do
   if [ -n "$REPO" ]; then
      if g rev-parse > /dev/null 2>&1; then
         echo " ${GREEN}Pulling $(eval "$REPO_ABBR")‥${NC}"
         g pull
         g diff --quiet || echo "${YELLOW}Warning: Working tree for $(eval "$REPO_ABBR") is dirty${NC}"
      fi
   fi
   UPDATED_STUFF=true
done

# check for dotfiles updates
${UPDATED_STUFF:-false} && echo
echo " ${GREEN}Updating dotfiles…${NC}"
dotfiles pull
dotfiles diff --quiet || echo "${YELLOW}Warning: Working tree for dotfiles is dirty${NC}"