From 34cf0c81724d9fcffc122b03b6ae9005839dfe83 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Mon, 15 Feb 2016 18:30:26 -0800 Subject: [PATCH] Updated hook to print messages like prepush --- hooks/pre-commit | 87 ++++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/hooks/pre-commit b/hooks/pre-commit index 02d11c0..a72e35f 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -5,12 +5,25 @@ #!/bin/sh # -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. +# Pre-commit hook for the tarpc repository. To use this hook, copy it to .git/hooks in your +# repository root. # -# To enable this hook, rename this file to "pre-commit". +# Options: +# +# - TARPC_SKIP_RUSTFMT, default = 0 +# +# Set this to 1 to skip running rustfmt + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +PREFIX="${GREEN}[PRECOMMIT]${NC}" +FAILURE="${RED}FAILED${NC}" +WARNING="${RED}[WARNING]${NC}" +SKIPPED="${YELLOW}SKIPPED${NC}" +SUCCESS="${GREEN}ok${NC}" if git rev-parse --verify HEAD >/dev/null 2>&1 then @@ -20,43 +33,45 @@ else against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi -# If you want to allow non-ASCII filenames set this variable to true. -allownonascii=$(git config --bool hooks.allownonascii) - # Redirect output to stderr. exec 1>&2 -# Cross platform projects tend to avoid non-ASCII filenames; prevent -# them from being added to the repository. We exploit the fact that the -# printable range starts at the space character and ends with tilde. -if [ "$allownonascii" != "true" ] && - # Note that the use of brackets around a tr range is ok here, (it's - # even required, for portability to Solaris 10's /usr/bin/tr), since - # the square bracket bytes happen to fall in the designated range. - test $(git diff --cached --name-only --diff-filter=A -z $against | +FAILED=0 + +printf "${PREFIX} Checking that all filenames are ascii ... " +# Note that the use of brackets around a tr range is ok here, (it's +# even required, for portability to Solaris 10's /usr/bin/tr), since +# the square bracket bytes happen to fall in the designated range. +if test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then - cat <<\EOF -Error: Attempt to add a non-ASCII file name. - -This can cause problems if you want to work with people on other platforms. - -To be portable it is advisable to rename the file. - -If you know what you are doing you can disable this check using: - - git config hooks.allownonascii true -EOF - exit 1 + FAILED=1 + printf "${FAILURE}\n" +else + printf "${SUCCESS}\n" fi -# If there are whitespace errors, print the offending file names and fail. -exec git diff-index --check --cached $against -- +printf "${PREFIX} Running rustfmt ... " +find tarpc/src -name "*.rs" -print0 | xargs -0 rustfmt --write-mode=overwrite &>/dev/null +FMTRESULT=$? +if [ "${TARPC_SKIP_RUSTFMT}" == 1 ]; then + printf "${SKIPPED}\n" +elif [ ${FMTRESULT} != 0 ]; then + FAILED=1 + printf "${FAILURE}\n" +else + printf "${SUCCESS}\n" +fi -YELLOW='\033[0;33m' -NC='\033[0m' # No Color +printf "${PREFIX} Checking for bad whitespace ... " +git diff-index --check --cached $against -- &>/dev/null +if [ "$?" != 0 ]; then + FAILED=1 + printf "${FAILURE}\n" +else + printf "${SUCCESS}\n" +fi -function cargo_format() { - echo ${YELLOW}[PRECOMMIT]${NC} Formatting $1 ... - cargo fmt --manifest-path $1/Cargo.toml &>/dev/null -} +if [ ${FAILED} != 0 ]; then + exit 1 +fi