diff --git a/dot_gitconfig.tmpl b/dot_gitconfig.tmpl index 8244b81..119518a 100644 --- a/dot_gitconfig.tmpl +++ b/dot_gitconfig.tmpl @@ -97,6 +97,7 @@ [core] editor = vim + hooksPath = ~/.config/git-hooks [push] # default = matching diff --git a/private_dot_config/git-hooks/pre-commit b/private_dot_config/git-hooks/pre-commit new file mode 100644 index 0000000..bcb57d9 --- /dev/null +++ b/private_dot_config/git-hooks/pre-commit @@ -0,0 +1,70 @@ +#!/bin/bash + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +checkBash() +{ + local file="$1" + echo "checking for 'version' in $file" + now=$(date +'%Y-%m-%d %R') + sed -i "s/version: .*/version: $now/" "$file" + sed -i "s/Version: .*/Version: $now/" "$file" + git add "$file" +} + +# Set (Last Modified: ) in CHANGELOG.md +checkChangelog() +{ + local file="$1" + echo "checking for 'Last Modified' in $file" + now=$(date +'%Y-%m-%d') + sed -i "s/\(Last Modified: .*\)/\(Last Modified: $now\)/" "$file" + git add "$file" +} + +# Use google-java-format to force code guidelines +# https://github.com/google/google-java-format +checkJavaFormat() +{ + local file="$1" + google-java-format --dry-run -aosp --set-exit-if-changed "$file" + retVal=$? + if [ $retVal -ne 0 ]; then + echo -e "\e[31mJava coding guidelines validation failed for $file \e[0m" >&2 + exit $retVal + fi +} + +for FILE in $(exec git diff --cached --name-only --diff-filter=ACMR) ; do + # Fix them! + case $FILE in + *.java) + echo "checking @version in $FILE" + now=$(date +'%d.%m.%Y %R') + sed -i "s/@version .*/@version $now/" "$FILE" + echo "checking code style in $FILE" + checkJavaFormat "$FILE" + git add "$FILE" + ;; + *.sh|*.profile) + checkBash "$FILE" + ;; + CHANGELOG.md) + checkChangelog "$FILE" + ;; + *.*|*/pre-commit) + echo "ignoring $FILE" + ;; + *) + checkBash "$FILE" + ;; + esac +done + +exit