#!/usr/bin/env bash

##
## This file is part of the coreboot project.
##
## Copyright (C) 2011 secunet Security Networks AG
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; version 2 of the License.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

# In the hooks, use the same `make` tool as used when running `make gitconfig`,
# e.g. `remake gitconfig` will set `remake` to be run by the hooks.
MAKE="${1:-make}"

if ! { cdup="$(git rev-parse --show-cdup 2>/dev/null)" && [ -z "${cdup}" ]; }
then
	echo "Error: Not in root of a git repository"
	exit 1
fi
coreboot_hooks=$(git rev-parse --git-path hooks)
mkdir -p "${coreboot_hooks}"
for hook in commit-msg pre-commit ; do
	if [ util/gitconfig/${hook} -nt "${coreboot_hooks}/${hook}" ] \
		|| [ ! -x "${coreboot_hooks}/${hook}" ]
	then
		sed -e "s,%MAKE%,${MAKE},g" util/gitconfig/$hook \
			> "${coreboot_hooks}/${hook}"
		chmod +x "${coreboot_hooks}/${hook}"
	fi
done
# Now set up the hooks for 3rdparty/
for submodule in 3rdparty/blobs libhwbase libgfxinit; do
	hooks=$(git -C "$(git config --file .gitmodules --get \
		submodule.${submodule}.path)" rev-parse --git-path hooks)
	if [ -d "${hooks}" ]; then
		if [ util/gitconfig/commit-msg -nt "${hooks}/commit-msg" ] \
			|| [ ! -x "${hooks}/commit-msg" ]
		then
			sed -e "s,%MAKE%,${MAKE},g" util/gitconfig/commit-msg \
				> "${hooks}/commit-msg"
			chmod +x "${hooks}/commit-msg"
		fi
	fi
done
for d in 3rdparty/{blobs,libhwbase,libgfxinit}; do
	if [ -d $d ]; then
		(cd $d || exit 1
		 git config remote.origin.push HEAD:refs/for/master)
	fi
done

git config remote.origin.push HEAD:refs/for/master
git config alias.sup "!git submodule update --remote --rebase && \
git submodule update --init --checkout"

git config alias.sup-destroy "!git submodule deinit --all --force; \
git submodule update --init --checkout"

{ git config --includes user.name && \
	git config --includes user.email; } >/dev/null || \
	{ cat <<-EOMSG
		Please configure your name and email in git:

		 git config --global user.name "Your Name Comes Here"
		 git config --global user.email your.email@example.com
EOMSG
exit 1; }
