#!/bin/bash
# Checkout and update source for all registered submodules (.gitmodules).
# Optionally 'git pull' on each submodule to check for updates.

# Change to root directory
cd $(git rev-parse --show-toplevel)

# Ensure all submodules (and child submodules) are checked-out
git submodule update --init --checkout --recursive

# Update submodules' remotes based on .gitmodules
git submodule sync

# Forcibly update each submodule's "master" branch to be the current revision
# in case HEAD is detached (e.g. due to "git submodule update --checkout")
git submodule foreach --recursive 'git checkout --quiet -B master'

if [ "$1" = "pull" ]; then
    # Fetch & pull any new updates from submodule's origin (but *NOT* any child
    # submodule updates -- those should come from the submodule proper)
    git submodule foreach 'git-up origin'
fi