1
0
mirror of https://github.com/aquatix/dotfiles.git synced 2025-12-06 22:55:10 +01:00
Files
dotfiles/bin/update_repos
2014-07-26 22:26:41 +02:00

90 lines
2.3 KiB
Bash
Executable File

#!/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
# Up-to-date
echo -e "[\e[32m-\e[0m] $GRP/$REPODIR"
elif [ $LOCAL = $BASE ]; then
# Need to pull
echo -e "[\e[33mU\e[0m] $GRP/$REPODIR"
git pull --quiet
elif [ $REMOTE = $BASE ]; then
# Need to push
echo -e "[\e[33mP\e[0m] $GRP/$REPODIR pushing"
git push --quiet
else
# Diverged
echo -e "[\e[31mX\e[0m] $GRP/$REPODIR diverged - $WORKSPACE/$GRP/$REPODIR"
fi
else
echo -e "[\e[33mC\e[0m] $GRP/$REPODIR"
git clone --quiet $LINE
fi
done