Add pre-commit.shellcheck hook
This commit is contained in:
commit
e11ff092a3
|
@ -0,0 +1,14 @@
|
|||
# githooks
|
||||
|
||||
A collection of various Git hook scripts for different purposes.
|
||||
This file contains a description of what each one is used for.
|
||||
|
||||
## pre-commit.shellcheck
|
||||
This is used in repositories containing Shell code to ensure that commits which would include code that causes `shellcheck` errors can't be committed.
|
||||
The files which are `shellchecked` are:
|
||||
- Any files for which the `file` command returns output containing 'shell script'
|
||||
- Any files which end in the `.sh` file extension
|
||||
- Any hidden files which begin with either `.bash` or `.zsh`
|
||||
|
||||
My version of this hook is based heavily on this Gist: https://gist.github.com/wookietreiber/3bf8621274caafed543fca6a3feab284
|
||||
Credit to [wookietreiber]<https://gist.github.com/wookietreiber> for the original.
|
|
@ -0,0 +1,47 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
function check_dependencies_installed() {
|
||||
for dependency in xargs shellcheck; do
|
||||
if ! command -v "$dependency" &>/dev/null; then
|
||||
printf '\e[1;31m[error]\e[0m \e[1mdependency\[0m is not installed.\n'
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function get_staged_files {
|
||||
if ! git rev-parse --verify HEAD &> /dev/null; then
|
||||
printf '\e[1;31m[error]\e[0m \e[1mHEAD\e[0m does not point to a commit.\n'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git diff-index --cached --name-only HEAD
|
||||
}
|
||||
|
||||
function get_shell_files {
|
||||
get_staged_files | xargs 'file' | grep 'shell script' | cut -d ':' -f 1
|
||||
get_staged_files | grep --regexp=".*\.sh$" --regexp="\.bash.*$" --regexp="\.zsh.*$"
|
||||
}
|
||||
|
||||
#function blah {
|
||||
#
|
||||
|
||||
#while read -r file; do
|
||||
#files[${files[@]}+1]="$file"
|
||||
#done < <()
|
||||
#}
|
||||
|
||||
function main {
|
||||
check_dependencies_installed
|
||||
|
||||
declare -a files=()
|
||||
while read -r file; do
|
||||
files[${files[@]}+1]="$file"
|
||||
done < <(get_shell_files)
|
||||
|
||||
shellcheck "${files[@]}"
|
||||
}
|
||||
|
||||
main
|
Loading…
Reference in New Issue