From 3c4576dd8e51ef328b70802f3dba5905e9ffc900 Mon Sep 17 00:00:00 2001 From: Pankaj Garg Date: Thu, 10 Jun 2021 23:12:43 -0700 Subject: [PATCH] Pre-commit hook to test if the code needs restyling (#7506) * Pre-commit hook to test if the code needs restyling * use diff patch to save unstaged changes * Fix spelling --- .githooks/pre-commit | 64 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 .githooks/pre-commit diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 00000000000000..b16f4739dd8327 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,64 @@ +#!/bin/sh + +here=${0%/*} + +CHIP_ROOT=$(cd "$here/.." && pwd) + +SAVED_UNSTAGED=0 +SAVED_UNSTAGED_FILE=$(git rev-parse --short HEAD)-unstaged.diff + +RESTYLED=0 + +save_unstaged() { + if [[ $SAVED_UNSTAGED -ne 0 ]]; then + git diff --output="$SAVED_UNSTAGED_FILE" + git apply -R "$SAVED_UNSTAGED_FILE" + fi +} + +revert_unstaged() { + if [[ $SAVED_UNSTAGED -ne 0 ]]; then + git apply "$SAVED_UNSTAGED_FILE" + rm "$SAVED_UNSTAGED_FILE" + fi + SAVED_UNSTAGED=0 +} + +revert_restyled() { + if [[ $RESTYLED -ne 0 ]]; then + # Reset the changes introduced by restyle + git stash push -q --keep-index + git stash drop -q + fi + RESTYLED=0 +} + +revert_if_needed() { + revert_restyled + revert_unstaged +} + +trap "revert_if_needed; exit 1" SIGINT SIGTERM SIGKILL + +git diff --quiet +SAVED_UNSTAGED=$? + +# If there are unstaged files, save them for now +save_unstaged + +# Try restyling the code +"$CHIP_ROOT"/scripts/helpers/restyle-diff.sh + +git diff --quiet +RESTYLED=$? +FAILED_COMMIT="$RESTYLED" + +revert_if_needed + +if [[ $FAILED_COMMIT -ne 0 ]]; then + echo "Commit Failed: Code needs restyling before committing." + echo "Restyling can be done by running $CHIP_ROOT/scripts/helpers/restyle-diff.sh" + exit 1 +fi + +echo "Code doesn't need restyling. Committing."