diff options
Diffstat (limited to 'Utilities/Git/pre-commit')
-rwxr-xr-x | Utilities/Git/pre-commit | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Utilities/Git/pre-commit b/Utilities/Git/pre-commit new file mode 100755 index 000000000..d308a81b5 --- /dev/null +++ b/Utilities/Git/pre-commit @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +#============================================================================= +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +die() { + echo 'pre-commit hook failure' 1>&2 + echo '-----------------------' 1>&2 + echo '' 1>&2 + echo "$@" 1>&2 + exit 1 +} + +#------------------------------------------------------------------------------- +line_too_long=80 +bad=$(regex=".{$line_too_long}" && +git diff-index --cached HEAD --name-only --diff-filter=AM \ + --pickaxe-regex -S"$regex" -- 'Source/*.h' 'Source/*.cxx' | +while read file; do + lines_too_long=$(git diff-index -p --cached HEAD \ + --pickaxe-regex -S"$regex" -- "$file") + if echo "$lines_too_long" | egrep -q '^\+'"$regex"; then + echo "$lines_too_long" + fi +done) +test -z "$bad" || +die 'The following changes add lines too long for our C++ style: + +'"$bad"' + +Use lines strictly less than '"$line_too_long"' characters in C++ code.' + +#------------------------------------------------------------------------------- +if test -z "$HOOKS_ALLOW_KWSYS"; then + # Disallow changes to KWSys + files=$(git diff-index --name-only --cached HEAD -- Source/kwsys) && + if test -n "$files"; then + die 'Changes to KWSys files + +'"$(echo "$files" | sed 's/^/ /')"' + +cannot be committed through Git. KWSys is kept in a CVS repository +shared by several projects. A robot replays changes committed there +into the Source/kwsys directory in CMake. Please send changes to +this directory separately. Run + + git reset HEAD -- Source/kwsys + +to unstage these changes and then + + git diff -- Source/kwsys > kwsys.patch + +to construct the patch. Alternatively, set environment variable + + HOOKS_ALLOW_KWSYS=1 + +to disable this check and commit the changes locally.' + fi +fi |