#!/bin/bash GIT_REPO="." WORK_DIR="~/.gitAutoPull" if [ $# -gt 0 ]; then GIT_REPO="$1" fi GIT_REPO_NAME="$(echo '$GIT_REPO' | tr '/' '_' | tr -d '~')" CHECK_TIMER_FILE=$WORK_DIR/localCommitsCheck"$GIT_REPO_NAME" if [ ! -d "$GIT_REPO/.git/" ]; then echo $GIT_REPO" is not a git repository" exit -2 fi if [ ! -d $WORK_DIR ]; then mkdir $WORK_DIR fi if [ ! -d $WORK_DIR ]; then echo "Could not create work directory, aborting" exit -4 fi cd $GIT_REPO if [ -e $CHECK_TIMER_FILE ]; then read count < $CHECK_TIMER_FILE if [ $cout -ne 0 ]; then echo $(( $count - 1 )) > $CHECK_TIMER_FILE exit -1 else rm -f $CHECK_TIMER_FILE fi fi remoteStatus="$(git fetch --all --dry-run)" # Empty if there are no commits to fetch localStatus="$(git push -n --porcelain | grep -e'up to date')" # Empty if there are commits to push if [ -z "$remoteStatus" ]; then if [ -z "$localStatus" ]; then echo "Pushing "$GIT_REPO" updates to origin" | wall git push | wall exit 1 fi else if [ -z "localStatus" ]; then echo "Local and remote diverged, stopping auto-update for 30 iterations..." | wall echo 30 > $WORK_DIR/localCommitsCheck"$GIT_REPO_NAME" else echo "Updating "$GIT_REPO" with remote commits" | wall git fetch --all | wall git remote update | wall exit 1 fi fi exit 0