#!/bin/bash filesToAddAfterFormatting=() containsSpotlessEnabledFormats=0 # 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 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 # 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