12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/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'
|