From 0f69164b62c5df0374bc0431de62267e8f2e750a Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 27 Apr 2021 22:21:34 +0530 Subject: Make pre-commit executable --- hooks/pre-commit | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) mode change 100644 => 100755 hooks/pre-commit (limited to 'hooks/pre-commit') diff --git a/hooks/pre-commit b/hooks/pre-commit old mode 100644 new mode 100755 index 00d361b..6e0b167 --- 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 -- cgit v1.2.1