#!/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 RUST_CHECKED=false checkBash() { local file="$1" echo "checking for 'version' in $file" now=$(date +'%Y-%m-%d %R') sed -i "s/version: 2023-01-16 15:36 sed -i "s/Version: 2023-01-16 15:36 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 } checkRustFormat() { if [ "$RUST_CHECKED" == "false" ]; then echo "checking rust code" command -v cargo || { echo -e "\e[31mcargo not found!\e[0m"; exit 1; } # diff=$(cargo fmt -- --check) cargo fmt -- --check result=$? if [[ $result -ne 0 ]]; then echo -e "\e[31mThere are some code style issues, run 'cargo fmt' first." exit 1 fi RUST_CHECKED=true 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" ;; *.rs) checkRustFormat ;; *.sh|*.profile) checkBash "$FILE" ;; CHANGELOG.md) checkChangelog "$FILE" ;; *.*|*/pre-commit) echo "ignoring $FILE" ;; *) checkBash "$FILE" ;; esac done exit