summaryrefslogtreecommitdiffstats
path: root/.hooks
diff options
context:
space:
mode:
Diffstat (limited to '.hooks')
-rwxr-xr-x.hooks/pre-commit34
1 files changed, 34 insertions, 0 deletions
diff --git a/.hooks/pre-commit b/.hooks/pre-commit
new file mode 100755
index 0000000..0f4c49a
--- /dev/null
+++ b/.hooks/pre-commit
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+trap 'rm -rf "$temp_dir"' EXIT
+temp_dir=".tmp"
+
+IFS='
+'
+for staged_file in $(git diff --cached --name-only); do
+ [ -f "${staged_file}" ] || continue
+ [ "${staged_file##*.}" = "java" ] || continue
+
+ check_files=y
+ mkdir -p "$temp_dir/$(dirname "$staged_file")"
+ git show :"$staged_file" > "$temp_dir/$staged_file"
+done
+unset IFS
+
+[ -z "$check_files" ] && exit 0
+
+printf "%s\n" "-a -n --set-exit-if-changed" > "$temp_dir/gf_config"
+
+find "$temp_dir" -name '*.java' >> "$temp_dir/gf_config"
+
+output=$(./mvnw -q exec:java \
+ -Dexec.mainClass="com.google.googlejavaformat.java.Main" \
+ -Dexec.args="@$temp_dir/gf_config")
+
+if [ $? != 0 ]; then
+ echo 'Run "./mvnw -q com.coveo:fmt-maven-plugin:format" first.' >&2
+ echo "Following files were rejected by the formatter:" >&2
+ escaped=$(printf '%s\n' "$temp_dir/" | sed 's/[[\.*^$/]/\\&/g')
+ printf "%s\n" "$output" | sed "s/$escaped/ /" >&2
+ exit 1
+fi