summaryrefslogtreecommitdiff
path: root/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'hooks')
-rwxr-xr-x[-rw-r--r--]hooks/pre-commit50
-rwxr-xr-xhooks/setup-hooks4
2 files changed, 45 insertions, 9 deletions
diff --git a/hooks/pre-commit b/hooks/pre-commit
index 00d361b..6e0b167 100644..100755
--- a/hooks/pre-commit
+++ b/hooks/pre-commit
@@ -1,14 +1,46 @@
-#!/bin/sh
+#!/bin/bash
-./gradlew spotlessCheck -q
-EXIT_CODE=$?
-if [ $EXIT_CODE -ne 0 ]; then
- echo "❌ spotlessCheck failed, running spotlessApply for you..."
+filesToAddAfterFormatting=()
+containsSpotlessEnabledFormats=0
- ./gradlew spotlessApply -q
+# Collect all files currently in staging area, and check if there are any spotless enabled format file
+# We currently support only *.kt, *.gradle', '*.md', '.gitignore' files.
+for entry in $(git status --porcelain | sed -r 's/[ \t]+/-/g'); do
+ # entry can be for example:
+ # MM-src/main/java/net/project/MyController.java
+ # -M-src/main/java/net/project/AnotherController.java
- echo "Formatting done, please try your commit again! If the problem persists, apply fixes manually."
- exit $EXIT_CODE
+ if [[ $entry == M* ]]; then
+ filesToAddAfterFormatting+=(${entry:2}) # strips the prefix
+ fi
+
+ if [[ $entry == *.kt ]] || [[ $entry == *.gradle ]] || [[ $entry == *.md ]] || [[ $entry == .gitignore ]]; then
+ containsSpotlessEnabledFormats=1
+ fi
+done
+
+# If any java or kotlin files are found, run spotlessApply
+if [ "$containsSpotlessEnabledFormats" == "1" ]; then
+ echo '[git hook] executing gradle spotlessCheck before commit'
+ ./gradlew spotlessCheck
+ EXIT_CODE=$?
+ if [ $EXIT_CODE -ne 0 ]; then
+ echo "❌ [git hook] spotlessCheck failed, running spotlessApply for you..."
+
+ ./gradlew spotlessApply
+
+ echo "[git hook] Formatting done, please try your commit again! If the problem persists, apply fixes manually."
+ exit $EXIT_CODE
+ fi
+ echo "✔️ [git hook] Spotless: Everything looks clean!"
+else
+ echo "[git hook] Not running spotless"
fi
-exit 0 \ No newline at end of file
+# Add the files that were in the staging area
+for file in "${filesToAddAfterFormatting[@]}"; do
+ echo "re-adding $file after formatting"
+ git add "$file"
+done
+
+exit 0
diff --git a/hooks/setup-hooks b/hooks/setup-hooks
new file mode 100755
index 0000000..4f48be0
--- /dev/null
+++ b/hooks/setup-hooks
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+# This script setups symlink from .git/hooks directory to this directory.
+ln -s -f ../../hooks/pre-commit .git/hooks/pre-commit \ No newline at end of file