Last Updated: July 25, 2019
·
3.088K
· angelbotto

pre-commit hooks

Pre-commit by @bottico

v0.0.1

I need hooks in git for run rspec and rubocop before commit, for this reason i create this scripts and share with you :)

Pre commit

run all scripts based in variable $HOOKS

#!/bin/sh
HOOKS="pre-commit-rspec pre-commit-rubocop pre-commit-prevent-master"


for hook in $HOOKS; do
    if [ -f "$PWD/.git/hooks/$hook" ]; then
        "$PWD/.git/hooks/$hook"
        if [ $? != 0 ]; then
            exit 1
        fi
    else
        echo "Error: file $hook not found."
        exit 1
    fi
done

pre-commit-prevent-master

Prevent commit in master

#!/bin/bash

echo -e "[PREVENT] --> init (wait a second)"
BRANCH=`git rev-parse --abbrev-ref HEAD`

if [ $BRANCH == master ]; then
    echo -e "[PREVENT] --> Non shall commit to master!"
    exit 1
else
    echo -e "[PREVENT] --> Prevent commit  approved"
    exit 0
fi

pre-commit-rspec

Run all rspec test.

#!/bin/bash
echo -e "[RSPEC] --> init (wait a second)"

FAILS=`bundle exec rspec --format progress | grep -E '(\d*) failure(s?)' -o | awk '{print $1}'`

if [ $FAILS -ne 0 ]; then
    echo -e "[RSPEC] --> ✋ Can't commit! You've broken $FAILS tests!!!"
    exit 1
else
    echo -e "[RSPEC] --> 👍 Commit approved."
    exit 0
fi

pre-commit-rubocop

Run robocop.

#!/bin/bash
echo -e "[RUBOCOP] --> Init (wait a second)"

FAILS=`bundle exec rubocop | grep 'no offenses detected' -o | awk '{print $1}'`

if [ "$FAILS" == "no" ]; then
    echo -e "[RUBOCOP] --> 👍 approved."
    exit 0
else
    echo -e "[RUBOCOP] --> ✋ You've $FAILS offenses!!!"
    exit 1
fi

Todo

  • better documentation