#!/bin/bash # This hook purpose is to keep coding style consistent between all developers # It is automatically installed in .git/hooks folder by cmake on first run. # From https://github.com/tatsuhiro-t/nghttp2/blob/master/pre-commit function invalid-format-detected { cat git-clang-format.diff echo "*****************" echo "$0: Invalid coding style detected (see git-clang-format.diff for issues). Please correct it using one of the following:" echo "1) Apply patch located at git-clang-format.diff using:" echo " cd $(git rev-parse --show-toplevel) && $1" echo "2) Use clang-format to correctly format source code using:" echo " $2" echo "3) Reformat these lines manually." echo "*** Aborting commit.***" exit 1 } function git-clang-format-diffing { format_diff=$(which git-clang-format) format_diff_options="--style=file" #only diffing commited files, ignored staged one $format_diff $format_diff_options --diff $(git --no-pager diff --cached --name-status | grep -v '^D' | cut -f2) > git-clang-format.diff if ! grep -q -E '(no modified files to format|clang-format did not modify any files)' git-clang-format.diff; then invalid-format-detected "git apply git-clang-format.diff" "clang-format $format_diff_options -i <some_file.c>" fi } function clang-format-diff-diffing { format_diff=$(find /usr/bin/ -name 'clang-format-diff*' -type f | tail -n1) format_diff_options="-style file" git diff-index --cached --diff-filter=ACMR -p HEAD -- | $format_diff $format_diff_options -p1 > git-clang-format.diff if [ -s git-clang-format.diff ]; then invalid-format-detected "patch -p0 < git-clang-format.diff" "${format_diff/-diff/} $format_diff_options -i <some_file.cpp>" fi } set -e if which git-clang-format &>/dev/null; then git-clang-format-diffing $@ elif [ ! -z "$(find /usr/bin/ /usr/local/bin/ /opt/bin/ -name 'clang-format-diff*' -type f 2>/dev/null)" ]; then # Warning! We need at least version 1.6... clang-format-diff-diffing $@ else echo "$0: Please install clang-format (coding style checker) - could not find git-clang-format nor clang-format-diff in PATH. Skipping code verification..." exit 0 fi