#!/bin/bash saveIFS="$IFS" IFS=$'\n' LINES=($(<~/.git_repos)) IFS="$saveIFS" # Set defaults to user's homedir and no group (e.g., subdir) WORKSPACE=$HOME GRP="" for LINE in "${LINES[@]}"; do if [ ${LINE:0:1} = '#' ] || [ -z $LINE ]; then # Comment or empty line encountered, skip #echo "comment or empty line" continue fi if [ ${LINE:0:10} = 'workspace=' ]; then length=${#LINE} WORKSPACEDIR=`echo $LINE | cut -d'=' -f 2` if [ -z $WORKSPACEDIR ]; then WORKSPACE=$HOME else WORKSPACE="$HOME/$WORKSPACEDIR" fi echo "workspace: $WORKSPACE" # Reset GRP, as we enter a new workspace GRP="" GPRDIR="" if [ ! -e $WORKSPACE ]; then mkdir -p $WORKSPACE fi continue fi if [ ${LINE:0:6} = 'group=' ]; then GRP=`echo $LINE | cut -d'=' -f 2` if [ ! -z $GRP ]; then GRPDIR=$WORKSPACE/$GRP else GRPDIR=$WORKSPACE fi continue fi if [ ! -e $GRPDIR ]; then mkdir $GRPDIR elif [ -f $GRPDIR ]; then echo -e "[\e[31mX\e[0m] Group directory already exists as file: $GRPDIR" exit 1 fi cd $GRPDIR REPODIR=$(basename "$LINE") #extension="${filename##*.}" REPODIR="${REPODIR%.*}" if [ -e $REPODIR ]; then cd $REPODIR git remote update > /dev/null LOCAL=$(git rev-parse @) REMOTE=$(git rev-parse @{u}) BASE=$(git merge-base @ @{u}) # 31: red, 32: green, 33: orange/yellow if ! git diff --quiet; then echo -e "[\e[31mX\e[0m] $GRP/$REPODIR changed - $WORKSPACE/$GRP/$REPODIR" elif [ $LOCAL = $REMOTE ]; then #echo "Up-to-date" echo -e "[\e[32mN\e[0m] $GRP/$REPODIR" elif [ $LOCAL = $BASE ]; then #echo "Need to pull" #echo -e "[\e[32mU\e[0m] $GRP/$REPODIR" echo -e "[\e[33mU\e[0m] $GRP/$REPODIR" #git pull --quiet elif [ $REMOTE = $BASE ]; then #echo "Need to push" echo -e "[\e[33mP\e[0m] $GRP/$REPODIR pushing" #git push else #echo "Diverged" echo -e "[\e[31mX\e[0m] $GRP/$REPODIR diverged - $WORKSPACE/$GRP/$REPODIR" fi #if ! git diff --quiet; then # echo -e "[\e[31mX\e[0m] $GRP/$REPODIR changed - $WORKSPACE/$GRP/$REPODIR" #else # echo -e "[\e[32mU\e[0m] $GRP/$REPODIR" # git pull --quiet # #git push --quiet #fi else echo -e "[\e[33mC\e[0m] $GRP/$REPODIR" git clone --quiet $LINE fi done