#!/usr/bin/env bash
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file LICENSE.rst 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
