#!/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/^/ /')"' should not be made directly in CMake. KWSys is kept in its own Git repository and shared by several projects. Please visit http://public.kitware.com/Wiki/KWSys/Git 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