diff --git a/conf-sync.sh b/conf-sync.sh new file mode 100644 index 0000000..3296fcd --- /dev/null +++ b/conf-sync.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +source "$(dirname "$0")/variables.conf" + +for dir in $sync_directory; do + git -C $dir rev-parse 2>/dev/null + if [ "$?" -ne 0 ]; then # ie. this is not a git repo + continue + fi + git -C $dir fetch + UPSTREAM=${1:-'@{u}'} + LOCAL=$(git -C $dir rev-parse @) + REMOTE=$(git -C $dir rev-parse "$UPSTREAM") + BASE=$(git -C $dir merge-base @ "$UPSTREAM") + if [ $LOCAL = $REMOTE ]; then + echo "$dir: up-to-date" + elif [ $LOCAL = $BASE ]; then + echo "pulling $dir" + git -C pull + if []; then + echo "Running $dir\'s install script..." + $dir/install.sh + fi + elif [ $REMOTE = $BASE ]; then + echo "WARNING: $dir is ahead of remote!" + else + echo "WARNING: $dir and remote have diverged!" + fi +done + +exit 0