mirror of
https://github.com/aquatix/dotfiles.git
synced 2025-12-06 21:45:10 +01:00
99 lines
2.6 KiB
Bash
Executable File
99 lines
2.6 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
|
|
#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
|