| #!/usr/bin/env bash | |
| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file Copyright.txt or https://cmake.org/licensing for details. | |
| 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.' | |
| #----------------------------------------------------------------------------- | |
| # Check that development setup is up-to-date. | |
| lastSetupForDevelopment=$(git config --get hooks.SetupForDevelopment || echo 0) | |
| eval $(grep '^SetupForDevelopment_VERSION=' "${BASH_SOURCE%/*}/../SetupForDevelopment.sh") | |
| test -n "$SetupForDevelopment_VERSION" || SetupForDevelopment_VERSION=0 | |
| if test $lastSetupForDevelopment -lt $SetupForDevelopment_VERSION; then | |
| die 'Developer setup in this work tree is out of date. Please re-run | |
| Utilities/SetupForDevelopment.sh | |
| ' | |
| fi | |
| #------------------------------------------------------------------------------- | |
| 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/^/ /')"' | |
| should not be made directly in CMake. KWSys is kept in its own Git | |
| repository and shared by several projects. Please visit | |
| https://gitlab.kitware.com/utils/kwsys | |
| to contribute changes directly to KWSys. Run | |
| git reset HEAD -- Source/kwsys | |
| to unstage these changes. Alternatively, set environment variable | |
| HOOKS_ALLOW_KWSYS=1 | |
| to disable this check and commit the changes locally.' | |
| fi | |
| fi |