#!/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` echo "group: $GRP" 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 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