#!/bin/bash
gitreppath="$(pwd)"
BINgit="/usr/bin/git"
branchcounter=0

PUT(){ echo -en "\033[${1};${2}H";}
DRAW(){ echo -en "\033%";echo -en "\033(0";}
WRITE(){ echo -en "\033(B";}
HIDECURSOR(){ echo -en "\033[?25l";}
NORM(){ echo -en "\033[?12l\033[?25h";}
function showBar {
        percDone=$(echo 'scale=2;'$1/$2*100 | bc)
        halfDone=$(echo $percDone/2 | bc) #I prefer a half sized bar graph
        barLen=$(echo ${percDone%'.00'})
        halfDone=`expr $halfDone + 6`
        tput bold
        PUT 6 28; printf "%4.4s  " $barLen%     #Print the percentage
        PUT 5 $halfDone;  echo -e "\033[7m \033[0m" #Draw the bar
        PUT 4 15; printf "%8.8s  " "$3"     #Print the percentage
        PUT 4 40; printf "%8.8s  " "$4"     #Print the percentage
        tput sgr0
        }
# Start Script
clear

if ! [ -z "${1}" ]
then
    if [ -d "${1}" ]
    then
        gitreppath="${1}"
    else
        echo "${1} is not a path"
        exit 1
    fi
fi

branchges=$(${BINgit} -C "${gitreppath}" br -a | grep -v remotes | grep -v "remotes/origin/HEAD" | wc -l)
activebranch="$(${BINgit} -C "${gitreppath}" branch | grep -E "^\*" | awk '{print $2}')"

HIDECURSOR
echo -e ""
echo -e "          GIT MODULE: ${gitreppath}"
echo -e "          UPDATE BRANCHES IS RUNNING"
DRAW    #magic starts here - must use caps in draw mode
echo -e "    lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"
echo -e "    x                                                   x"
echo -e "    mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj"
WRITE

for f in $(${BINgit} -C "${gitreppath}" br -a | grep -v remotes | sed -E 's/\* //g' | awk '{print $1}')
do
    showBar ${branchcounter} ${branchges} ${f} "[$((${branchcounter} + 1))/${branchges}]"  #Call bar drawing function "showBar"
   ${BINgit} -C "${gitreppath}" checkout "${f}" --quiet && ${BINgit} -C ${gitreppath} pull --rebase origin "${f}" --quiet >/dev/null 2>&1
    branchcounter=$((${branchcounter} + 1))
done
showBar ${branchcounter} ${branchges} ${f} "[${branchcounter}/${branchges}]"  #Call bar drawing function "showBar"
${BINgit} -C "${gitreppath}" checkout "${activebranch}" --quiet

PUT 10 12
echo -e ""
NORM