summaryrefslogtreecommitdiff
path: root/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'hooks')
-rw-r--r--hooks/README.md3
-rwxr-xr-xhooks/clang-format.sh24
-rwxr-xr-xhooks/pre-commit3
3 files changed, 30 insertions, 0 deletions
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