From f54ce57acf774072497155969aae7199584c4ac7 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 8 Feb 2016 11:17:48 +0100 Subject: [PATCH] .git-pre-commit: update to have both diff patch and file patch --- .git-pre-commit | 62 +++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/.git-pre-commit b/.git-pre-commit index 69a71bea9..76e3a9ab1 100755 --- a/.git-pre-commit +++ b/.git-pre-commit @@ -5,47 +5,53 @@ # 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 -} +git_clang_format_path="$(which git-clang-format)" +clang_format_path=$(find /usr/bin /usr/local/bin/ -name 'clang-format-diff*' -type f -maxdepth 1 | tail -n1) + + function git-clang-format-diffing { - format_diff=$(which git-clang-format) - format_diff_options="--style=file" + 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 + $git_clang_format_path $options --diff $(git --no-pager diff --cached --name-status | grep -v '^D' | cut -f2) > diff-format.patch - 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 " + if grep -q -E '(no modified files to format|clang-format did not modify any files)' diff-format.patch; then + rm diff-format.patch fi } function clang-format-diff-diffing { - format_diff=$(find /usr/bin/ -name 'clang-format-diff*' -type f | tail -n1) - format_diff_options="-style file" + 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 " + git diff-index --cached --diff-filter=ACMR -p HEAD -- | $clang_format_path $options -p1 > file-format.patch + if [ ! -s file-format.patch ]; then + rm file-format.patch 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 + +if [ -z "$git_clang_format_path$clang_format_path" ]; then 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 + +if [ ! -z "$git_clang_format_path" ]; then + git-clang-format-diffing +fi + +if [ ! -z "$clang_format_path" ]; then + # Warning! We need at least version 1.6... + clang-format-diff-diffing +fi + +if [ -f diff-format.patch ] || [ -f file-format.patch ]; then + [ -f diff-format.patch ] && cat diff-format.patch + echo "**********************************************************************" + echo "$0: Invalid coding style detected. Please correct it using one of the following:" + echo "* Reformat these lines manually." + [ -f diff-format.patch ] && printf "* Apply diff patch using:\n\tcd $(git rev-parse --show-toplevel) && git apply diff-format.patch\n" + [ -f file-format.patch ] && printf "* Apply diff patch using:\n\tpatch -p0 < file-format.patch\n" + echo "*** Aborting commit.***" + exit 1 +fi