I'm trying to stop a git commit from continuing with a pre-commit hook. From reading the manual, it should stop when you return an exit code other than 0. I'm testing to see if the csscomb command returns an error, and if it does then break the loop and exit, but the git commit still continues on to entering a message via git commit (-a).
I've forked and modified the script below from https://github.com/filtercake/git-pre-commit-csscomb
#!/bin/bash
# pre-commit hook to comb staged .sass and .scss files
# save as .git/hooks/pre-commit
# make executable: chmod +x .git/hooks/pre-commit
# sources:
# http://www.hagenburger.net/BLOG/Using-Git-Commit-Hooks-to-Autocompile-Sass-to-CSS.html
# http://stackoverflow.com/questions/8470755/git-pre-commit-hook-add-file-into-index/8471009#8471009
# http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script/677212#677212
# https://gist.github.com/openam/8406343
# check if sass/scss files are staged for commit
# diff-lines from http://stackoverflow.com/a/12179492/3019532
# takes the line
function diff-lines() {
    local path=
    local line=
    while read; do
        esc=$'\033'
        if [[ $REPLY =~ ---\ (a/)?.* ]]; then
            continue
        elif [[ $REPLY =~ \+\+\+\ (b/)?([^[:blank:]$esc]+).* ]]; then
            path=${BASH_REMATCH[2]}
        elif [[ $REPLY =~ @@\ -[0-9]+(,[0-9]+)?\ \+([0-9]+)(,[0-9]+)?\ @@.* ]]; then
            line=${BASH_REMATCH[2]}
        elif [[ $REPLY =~ ^($esc\[[0-9;]+m)*([\ +-]) ]]; then
            echo "Line $line:$REPLY"
            if [[ ${BASH_REMATCH[2]} != - ]]; then
                ((line++))
            fi
        fi
    done
}
if ! git diff --quiet --cached -- **/*.{sass,scss}; then
            echo ""
            echo "--> you checked in sass/scss files. lets comb them..."
            echo ""
            # check if csscomb is installed
            if hash csscomb 2>/dev/null; then
                echo -e "\033[1;32m--> found csscomb\033[0m"
                # TODO: check for csscomb update once a week
                # check if configfile exists
                if [ ! -f ./.csscomb.json ]; then
                    echo "--> no config file, using defaults"
                else
                    echo -e "\033[1;32m--> found .csscomb.json\033[0m"
                fi
                echo ""
                # Necessary check for initial commit
                against="4b825dc642cb6eb9a060e54bf8d69288fbee4904"
                git rev-parse --verify HEAD >/dev/null 2>&1 && against="HEAD"
                EXITCODE=0
                # (A)dded (C)opied or (M)odified
                # encapsulate the loop in {} http://stackoverflow.com/a/13665483/3019532
                git diff-index --cached --full-index --diff-filter=ACM $against | \
                {
                    while read -r line; do
                      FILE_PATH="$(echo ${line} |cut -d' ' -f6-)"
                      EXTENSION="${FILE_PATH##*.}"
                      # EXTENSION=${EXTENSION,,} # Convert to lowercase
                      REGEX=""
                      # Select discouraged words based on extension
                      if [ "${EXTENSION}" = "sass" ] || [ "${EXTENSION}" = "scss" ]; then
                        echo "--> staged sass/scss file: " $FILE_PATH
                        echo "--> combing..."
                        if csscomb $FILE_PATH; then
                            echo "--> adding combed file"
                            git add $FILE_PATH
                            echo "--> done"
                        else
                            echo "Check your CSS file for combing errors or alternatively add '-n' to your git commit to bypass this hook"
                            break
                            exit 1 # Should stop the git commit from continuing
                        fi
                      fi
                    done
                }
            else
                echo -e "\033[0;31m--> Oh noes, CSS Comb is not installed. Do:"
                echo "--> npm install csscomb -g"
                echo -e "\033[0m"
                echo "--> (you need to change and stage a sass/scss file again to see it work on the next commit...)"
                echo ""
            fi
fi
# Necessary check for initial commit
against="4b825dc642cb6eb9a060e54bf8d69288fbee4904"
git rev-parse --verify HEAD >/dev/null 2>&1 && against="HEAD"
EXITCODE=0
exit 0
 
    