citra/hooks/pre-commit
noah the goodra 8c14d8bae5 added a special check to the pre-hook to output to file
this change adds an if statement to the pre-hook that will either dump the diff into the terminal if its less then or equal to 30 charaters or will write it to a temp file and tell the user where said file is so they can read the fixes.
this helps if the user is using something like an ide. examples would include clion,possibly netbeans,and visual studio.
The issue is that the prehook output doesnt get dumped into a full terminal (in the case of clion anyway) and ends up being obstructed by the ui of the ide product.
2017-01-31 14:45:16 -06:00

59 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
if [ "$(uname)" == "Darwin" ]; then
PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/local/opt/llvm/bin:
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/local/opt/llvm/bin:
elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/local/opt/llvm/bin:
fi
# Enforce citra's whitespace policy
git config --local core.whitespace tab-in-indent,trailing-space
paths_to_check="src/ CMakeLists.txt"
# If there are whitespace errors, print the offending file names and fail.
if ! git diff --cached --check -- $paths_to_check ; then
cat<<END
Error: This commit would contain trailing spaces or tabs, which is against this repo's policy.
Please correct those issues before committing. (Use 'git diff --check' for more details)
If you know what you are doing, you can try 'git commit --no-verify' to bypass the check
END
exit 1
fi
# Check for tabs, since tab-in-indent catches only those at the beginning of a line
if git diff --cached -- $paths_to_check | egrep '^\+.* '; then
cat<<END
Error: This commit would contain a tab, which is against this repo's policy.
If you know what you are doing, you can try 'git commit --no-verify' to bypass the check.
END
exit 1
fi
for f in $(git diff --name-only --diff-filter=ACMRTUXB --cached); do
if ! echo "$f" | egrep -q "[.](cpp|h)$"; then
continue
fi
if ! echo "$f" | egrep -q "^src/"; then
continue
fi
d=$(clang-format "$f" | diff -u "$f" -)
if ! [ -z "$d" ]; then
if [ ${#d} -le 30 ]; then
echo "!!! $f not compliant to coding style, here is the fix:"
echo "$d"
else
TEMP=$(mktemp)
echo "$d" > ${TEMP}
echo "!!! $f not compliant to coding style, here is the fix: ${TEMP} please open it in your diff viewer"
fi
fail=1
fi
done
exit "${fail-0}"