From 2fcd97f507c2a828005cb3e26d3f58214bce38fe Mon Sep 17 00:00:00 2001 From: Yang Zhexuan Date: Mon, 24 Apr 2017 23:20:39 +0800 Subject: [PATCH] *: added pre-commit hook. (#3112) --- hooks/pre-commit | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 hooks/pre-commit diff --git a/hooks/pre-commit b/hooks/pre-commit new file mode 100755 index 0000000000000..c7e5f69a30aa9 --- /dev/null +++ b/hooks/pre-commit @@ -0,0 +1,73 @@ +#!/bin/bash +# This file modified from k8s +# https://github.com/kubernetes/kubernetes/blob/master/hooks/pre-commit + +# How to use this hook? +# ln -s hooks/pre-commit .git/hooks/ +# In case hook is not executable +# chmod +x .git/hooks/pre-commit + +readonly reset=$(tput sgr0) +readonly red=$(tput bold; tput setaf 1) +readonly green=$(tput bold; tput setaf 2) + +exit_code=0 + +echo -ne "Checking that it builds..." +if ! OUT=$(make 2>&1); then + echo + echo "${red}${OUT}" + exit_code=1 +else + echo "${green}OK" +fi +echo "${reset}" + +echo -ne "Checking for files that need gofmt... " +files_need_gofmt=() +files=($(git diff --cached --name-only --diff-filter ACM | grep "\.go" | grep -v -e "^_vendor")) +for file in "${files[@]}"; do + # Check for files that fail gofmt. + diff="$(git show ":${file}" | gofmt -s -d 2>&1)" + if [[ -n "$diff" ]]; then + files_need_gofmt+=("${file}") + fi +done + +if [[ "${#files_need_gofmt[@]}" -ne 0 ]]; then + echo "${red}ERROR!" + echo "Some files have not been gofmt'd. To fix these errors, " + echo "copy and paste the following:" + echo " gofmt -s -w ${files_need_gofmt[@]}" + exit_code=1 +else + echo "${green}OK" +fi +echo "${reset}" + +echo -ne "Checking for files that need goword... " +files_need_goword=() +files=($(git diff --cached --name-only --diff-filter ACM | grep "\.go" | grep -v -e "^_vendor")) +for file in "${files[@]}"; do + # Check for files that fail goword. + diff=$(goword ${file}) + if [[ -n "$diff" ]]; then + files_need_goword+=("${file}") + fi +done + +if [[ "${#files_need_goword[@]}" -ne 0 ]]; then + echo "${red}ERROR!" + echo "Some files may have spelling errors." + # echo ${files_need_goword[@]} + echo "make goword for more details" + exit_code=1 +else + echo "${green}OK" +fi +echo "${reset}" + +if [[ "${exit_code}" != 0 ]]; then + echo "${red}Aborting commit${reset}" +fi +exit ${exit_code}