#!/usr/bin/env bash
#=============================================================================
# Copyright 2010-2012 Kitware, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#=============================================================================

# Run this script to set up local Git hooks for this project.

# Project configuration instructions:
#
# - Publish a "hooks" branch in the project repository such that
#   clones will have "refs/remotes/origin/hooks".
#
# - Populate adjacent "config" file with:
#    hooks.url    = Repository URL publishing "hooks" branch
#    hooks.branch = Repository branch instead of "hooks"

egrep_q() {
	egrep "$@" >/dev/null 2>/dev/null
}

die() {
	echo 1>&2 "$@" ; exit 1
}

# Make sure we are inside the repository.
cd "${BASH_SOURCE%/*}" &&

# Select a hooks branch.
if url=$(git config --get hooks.url); then
	# Fetch hooks from locally configured repository.
	branch=$(git config hooks.branch || echo hooks)
elif git for-each-ref refs/remotes/origin/hooks 2>/dev/null |
     egrep_q 'refs/remotes/origin/hooks$'; then
	# Use hooks cloned from origin.
	url=.. && branch=remotes/origin/hooks
elif url=$(git config -f config --get hooks.url); then
	# Fetch hooks from project-configured repository.
	branch=$(git config -f config hooks.branch || echo hooks)
else
	die 'This project is not configured to install local hooks.'
fi &&

# Populate ".git/hooks".
echo 'Setting up git hooks...' &&
git_dir=$(git rev-parse --git-dir) &&
mkdir -p "$git_dir/hooks" &&
cd "$git_dir/hooks" &&
if ! test -e .git; then
	git init -q || die 'Could not run git init for hooks.'
fi &&
git fetch -q "$url" "$branch" &&
git reset -q --hard FETCH_HEAD || die 'Failed to install hooks'
