#!/usr/bin/env bash
set -euo pipefail

if [ ! -d "$HOME/GitProjects" ]; then
    mkdir "$HOME/GitProjects"
fi

WORKPATH="$HOME/GitProjects"

readarray -t dirs < <(find "$WORKPATH" -mindepth 1 -maxdepth 1 -type d -printf '%P\n')

for dir in "${dirs[@]}"; do
    # go into GitProjects directory
    cd "$WORKPATH"
    # output directory you're currently working on
    printf "Working on ${dir}\n"
    # change into that directory
    cd "$dir"
    # try to check out master or main branch
    set +e
    git checkout -q master 2>/dev/null \
        || git checkout -q main 2>/dev/null
    # check whether the previous two commands failed
    if [ $? -ne 0 ]; then
        printf "Couldn't find master or main branch\n"
    # if all is well, fetch and pull
    else
        git fetch --all
        git pull
    fi
    set -e
done

exit 0