#!/bin/sh

: ${J=-j2}
force=
while	case "$1" in
	-pedantic) M=$1 ;;
	-force) force=$1 ;;
	*) break ;;
	esac
do
	shift
done

test -z "$(git diff --cached --name-status)" || {
	echo >&2 "Repository unclean."
	exit 1
}
Meta/Make clean >/dev/null 2>&1

: ${branches='next master maint pu'}

for branch in $branches
do
	echo >&3 "** $branch **"

	revision=$(git show-ref -s --verify "refs/heads/$branch") || {
		echo "** No $branch"
		continue
	}

	if	installed=$($HOME/git-$branch/bin/git version) &&
		if version=$(expr "$installed" : '.*\.g\([0-9a-f]*\)$')
		then
			:
		elif version=v$(expr "$installed" : \
				'git version \(.*\)\.rc[0-9]*$')
		then
			version="$version"-$(expr "$installed" : \
				'git version .*\.\(rc[0-9]*\)$')
		else
			version=v$(expr "$installed" : 'git version \(.*\)')
		fi &&
		version=$(git rev-parse --verify "$version^0" 2>/dev/null) &&
		test "z$version" = "z$revision"
	then
		echo "* up-to-date version \"$installed\" is already installed from $branch"
		test -n "$force" || continue
	fi

	echo "** $branch" &&
	git checkout $branch &&
	Meta/Make $M -- $J all &&
	Meta/Make $M -- test &&
	Meta/Make $M -- install &&
	Meta/Make clean || exit $?

done >./:all.log 3>&2 2>&1

git checkout master


