#!/usr/bin/env bash

while true ; do
	case $1 in
		-h|--help)
			echo "Usage: $(basename "$0") [OPTIONS] [PATH]"
			echo
			echo "Pull all repositories in PATH."
			echo
			echo "Options:"
			echo "    -h --help       - print this message and exit"
			echo "    -r --recursive  - pull directories recursively"
			echo
			exit
			;;

		-r|--recursive)
			RECURSIVE=-r
			shift
			continue
			;;

		-*|--*)
			echo "Error: unknown option: \"$1\"" >&2
			exit
			;;
		*)
			TARGET_PATH=$1
			break
			;;
	esac
done

TARGET_PATH=${TARGET_PATH:=.}
cd "$TARGET_PATH"

IFS=$'\n'
DIRS=($(git listall -d ${RECURSIVE}))

# inside a repo...
if [ -d ./.git ] ; then
	git pull
	exit 0
fi


# no matches...
if [[ $DIRS =~ \* ]] ; then
	echo "no repos found." >&2
	exit 1
fi


# do the update...
wd=$(pwd)
for dir in "${DIRS[@]}" ; do
	dir="${dir%.git}"
	echo "$dir"
	if [ -e "$dir/.pullall-skip" ] ; then
		echo "skipping..."
		echo
		continue
	fi
	cd "$dir"
	git pull
	cd "$wd"
	echo
done


# vim:set sw=4 ts=4 :
