diff options
author | Brad King <brad.king@kitware.com> | 2012-03-02 18:28:11 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-03-02 18:28:11 (GMT) |
commit | 97e1cc2880746d6a7e641a9b072af6dac10f96b3 (patch) | |
tree | 79ce8837da3b524291972a73625a19a05d2d625e /Utilities/GitSetup/setup-hooks | |
parent | 5012787c3c63523115f2f5254644d320ad27beba (diff) | |
parent | 2f79eb8e3a19d251cac7a4df7dbc29a20fda23f3 (diff) | |
download | CMake-97e1cc2880746d6a7e641a9b072af6dac10f96b3.zip CMake-97e1cc2880746d6a7e641a9b072af6dac10f96b3.tar.gz CMake-97e1cc2880746d6a7e641a9b072af6dac10f96b3.tar.bz2 |
Merge branch 'setup' into developer-setup
Add Utilities/GitSetup/ directory using subtree merge from
the general GitSetup repository "setup" branch.
Diffstat (limited to 'Utilities/GitSetup/setup-hooks')
-rwxr-xr-x | Utilities/GitSetup/setup-hooks | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/Utilities/GitSetup/setup-hooks b/Utilities/GitSetup/setup-hooks new file mode 100755 index 0000000..c07985a --- /dev/null +++ b/Utilities/GitSetup/setup-hooks @@ -0,0 +1,63 @@ +#!/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) && +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' |