From 1dc163c06639d6c225b25c9dd2955b21bbb706d3 Mon Sep 17 00:00:00 2001 From: aqua Date: Sun, 14 Aug 2022 20:24:10 +0300 Subject: pre-commit hook: Add clang-format check --- .clang-format | 10 ++++++ git_hooks/README | 8 ----- git_hooks/pre-commit/codingstyle_check | 61 -------------------------------- git_hooks/pre-commit/copyrightyear_check | 51 -------------------------- git_hooks/pre-commit/makeobj_check | 46 ------------------------ hooks/README.md | 3 ++ hooks/clang-format.sh | 24 +++++++++++++ hooks/pre-commit | 3 ++ 8 files changed, 40 insertions(+), 166 deletions(-) create mode 100644 .clang-format delete mode 100644 git_hooks/README delete mode 100755 git_hooks/pre-commit/codingstyle_check delete mode 100755 git_hooks/pre-commit/copyrightyear_check delete mode 100755 git_hooks/pre-commit/makeobj_check create mode 100644 hooks/README.md create mode 100755 hooks/clang-format.sh create mode 100755 hooks/pre-commit diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..c033b363 --- /dev/null +++ b/.clang-format @@ -0,0 +1,10 @@ +--- +BasedOnStyle: LLVM +AllowShortIfStatementsOnASingleLine: Always +AllowShortBlocksOnASingleLine: 'true' +AllowShortLoopsOnASingleLine: 'true' +BreakBeforeBraces: Stroustrup +ColumnLimit: '120' +UseTab: Never + +... diff --git a/git_hooks/README b/git_hooks/README deleted file mode 100644 index d460b95c..00000000 --- a/git_hooks/README +++ /dev/null @@ -1,8 +0,0 @@ -These git hooks have been copied and adjusted from Arora code. - -Many thanks to Benjamin "icefox" Meyer for providing them. - --------------- -They are managed using the git-hooks tool (Available here http://github.com/icefox/git-hooks) - -To enable them run "git hooks --install" diff --git a/git_hooks/pre-commit/codingstyle_check b/git_hooks/pre-commit/codingstyle_check deleted file mode 100755 index dffebed5..00000000 --- a/git_hooks/pre-commit/codingstyle_check +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2010, Benjamin C. Meyer -# Copyright (C) 2011 by Andrea Diamantini -# -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License or (at your option) version 3 or any later version -# accepted by the membership of KDE e.V. (or its successor approved -# by the membership of KDE e.V.), which shall act as a proxy -# defined in Section 14 of version 3 of the license. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -####################################################################### - -function test_file { - file="${1}" - echo "" - echo "------- Checking style on .cpp files" - tempfoo=`basename $0` - newfile=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1 - astyle \ - --indent=spaces=4 \ - --style=allman \ - --indent-labels \ - --pad-oper \ - --pad-header \ - --unpad-paren \ - --keep-one-line-statements \ - --convert-tabs \ - --indent-preprocessor < $file > $newfile 2>> /dev/null - diff "${file}" "${newfile}" - r=$? - rm "${newfile}" - if [ $r != 0 ] ; then - echo "Code style error in $file, please fix before commiting." - exit 1 - fi - echo "------- Style check PASSED" - echo "" -} - -case "${1}" in - --about ) - echo "Check that the code follows a consistent code style." - ;; - * ) - for file in `git diff-index --cached --name-only HEAD | grep .cpp` ; do - test_file "${file}" - done - ;; -esac diff --git a/git_hooks/pre-commit/copyrightyear_check b/git_hooks/pre-commit/copyrightyear_check deleted file mode 100755 index a489e1e8..00000000 --- a/git_hooks/pre-commit/copyrightyear_check +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2010, Benjamin C. Meyer -# Copyright (C) 2011 by Andrea Diamantini -# -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License or (at your option) version 3 or any later version -# accepted by the membership of KDE e.V. (or its successor approved -# by the membership of KDE e.V.), which shall act as a proxy -# defined in Section 14 of version 3 of the license. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -####################################################################### - - -function test_file { - year=`date +%Y` - echo "------- checking copyright year: $file" - grep $year $file >> /dev/null - if [ $? -ne 0 ] ; then - echo "------- Warning: $file seems to be missing a copyright string with the year $year in it."; - exit 1 - else - echo "------- checking copyright year: PASS" - echo "" - fi -} - -case "${1}" in - --about ) - echo "Check the files that are being committed for a copyright with a proper year." - ;; - * ) - for file in `git diff-index --cached --name-only HEAD | grep \.h$` ; do - test_file "${file}" - done - for file in `git diff-index --cached --name-only HEAD | grep \.cpp$` ; do - test_file "${file}" - done - ;; -esac diff --git a/git_hooks/pre-commit/makeobj_check b/git_hooks/pre-commit/makeobj_check deleted file mode 100755 index 279c3554..00000000 --- a/git_hooks/pre-commit/makeobj_check +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2010, Benjamin C. Meyer -# Copyright (C) 2011 by Andrea Diamantini -# -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License or (at your option) version 3 or any later version -# accepted by the membership of KDE e.V. (or its successor approved -# by the membership of KDE e.V.), which shall act as a proxy -# defined in Section 14 of version 3 of the license. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -####################################################################### - - -function compile { - unset GIT_DIR - echo "------- Attempting to build in $PWD" - makeobj --quiet - if [ $? != 0 ] ; then - echo "------- Build failed, fix failure before commiting"; - exit 1 - fi - - echo "------- Attempting to build PASS" - echo "" -} - -case "${1}" in - --about ) - echo "Wherever you are make sure something compiles". - ;; - * ) - compile - ;; -esac diff --git a/hooks/README.md b/hooks/README.md new file mode 100644 index 00000000..d030e315 --- /dev/null +++ b/hooks/README.md @@ -0,0 +1,3 @@ +The commit hook has been copied from the kmail source code. + +To install, symlink the hooks into ``.git/hooks`` diff --git a/hooks/clang-format.sh b/hooks/clang-format.sh new file mode 100755 index 00000000..716a80ff --- /dev/null +++ b/hooks/clang-format.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Based on okular/hooks/pre-commit, credits go to Albert Astals Cid + +readonly output=$(git clang-format --extensions 'cpp,h,hpp,c' -v --diff) + +if [[ ! -f .clang-format ]]; then + if [[ TRUE = TRUE ]]; then + echo "ERROR: no .clang-format file found in repository root, abort format" + echo " run cmake for this repository to generate it" + else + echo "ERROR: no .clang-format file found in repository root, abort format" + echo "Make sure the KDEClangFormat CMake module is included, which will copy the KDE .clang-format file during the CMake configuration." + echo "Alternatively you can manually copy a .clang-format file to the repository root directory." + fi + exit 1 +fi +if [[ "$output" == *"no modified files to format"* ]]; then exit 0; fi +if [[ "$output" == *"clang-format did not modify any files"* ]]; then exit 0; fi + +echo "ERROR: You have unformatted changes, please format your files. You can do this using the following commands:" +echo " git clang-format --extensions 'cpp,h,hpp,c' --force # format the changed parts" +echo " git clang-format --extensions 'cpp,h,hpp,c' --diff # preview the changes done by the formatter" +exit 1 diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 00000000..aa7cbe8a --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +./hooks/clang-format.sh -- cgit v1.2.1