Skip to content

Instantly share code, notes, and snippets.

@sudoaza
Forked from edisonywh/pre-commit
Last active February 14, 2023 13:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sudoaza/238c313ee1498028ea1355f873aa6132 to your computer and use it in GitHub Desktop.
Save sudoaza/238c313ee1498028ea1355f873aa6132 to your computer and use it in GitHub Desktop.
Run Rubocop in Git's pre-commit hook
```
#!/bin/sh
echo "\nRunning rubocop...\n"
declare -a ERRORS=()
ERRORS=("$(rubocop $(git diff --cached --name-only | tr -s "\n" " ") | grep -e 'C:' -e 'E:')")
if [[ "$ERRORS" != "" ]]; then
echo "\n BEE-BOP! There are some things that you need to fix before commiting!\n"
history -p "${ERRORS[@]}"
exit 1
fi
echo "Done! Rubocop has no complains!\n"
exit 0
```
#####
Two steps to get it working:
1) Run this command in your root directory: `mv .git/hooks/pre-commit.sample .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit`
2) Replace the content of the file with the bash script above.
NOTE:
- The first line tells it what intepreter to use, here it's using bash. You can do #!/bin/sh ruby if you want to write a Ruby script.
- `mv` command is to rename the `.githook` from a sample to a legit one. Then `chmod` makes it executable so that it'll actually run.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment