#!/usr/bin/env bash
#
# Runs clang-format on changed regions before commit.
#
# Remaining installation checks/instructions will be printed when you commit.
#
# Based on clang-format pre-commit hook by Alex Eagle
# https://gist.github.com/alexeagle/c8ed91b14a407342d9a8e112b5ac7dab

# Set KICAD_CHECK_FORMAT to allow this hook to run
# if not set, the hook always succeeds.
if [ -z "$KICAD_CHECK_FORMAT" ]; then
    exit 0
fi

check_clang_format() {
    if hash git-clang-format 2>/dev/null; then
        return
    else
        echo "SETUP ERROR: no git-clang-format executable found, or it is not executable"
        exit 1
    fi
}

check_git_config() {
    if [[ "$(git config --get clangFormat.style)" != "file" ]]; then
        echo "SETUP ERROR: git config clangFormat.style is wrong (should be 'file'). Fix this with:"
        echo "git config clangFormat.style file"
        exit 1
    fi
}

check_clang_format
check_git_config

readonly out=$(git clang-format -v --diff)

# In these cases, there is no formatting issues, so we succeed
if [[ "$out" == *"no modified files to format"* ]]; then exit 0; fi
if [[ "$out" == *"clang-format did not modify any files"* ]]; then exit 0; fi

# Any other case implies formatting results
echo "ERROR: you need to run git clang-format on your commit"

# print the errors to show what's the issue
git clang-format -v --diff

# fail the pre-commit
exit 1
