meta:hooks: Refactor commit-msg (sh -> bash)

Refactor commit-msg to reduce redundancies by splitting up the pattern
into the different 'levels'.
For the array the change from /bin/sh to /bin/bash was necessary.
Because of that: Change all `test` occurrences to [[ ]] for performance.
This commit is contained in:
2020-10-26 15:00:38 +01:00
parent d1869afff6
commit 0db8155002

View File

@@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
# #
# A hook script to check the commit log message. # A hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file that has the # Called by "git commit" with one argument, the name of the file that has the
@@ -17,22 +17,32 @@ die() {
subject="$(head -1 "$1")" subject="$(head -1 "$1")"
body="$(tail +2 "$1" | grep -v "^#")" body="$(tail +2 "$1" | grep -v "^#")"
[ ${#subject} -le 50 ] || die "Subject too long. (<= 50)\n" [[ ${#subject} -le 50 ]] || die "Subject too long. (<= 50)\n"
if ! echo "$subject" | grep -qE "^([-_,*(){}a-zA-Z0-9]+:)+ "; then # The subject line has to match "${pats[@]}", but to be more verbose different
die "Specify which program was modified. (e.g. \"zsh:p10k: <subject>\")\n" # error messages are printed for the different 'levels' of the pattern.
fi declare -a pats msg
if ! echo "$subject" | grep -qE "^([-_,*(){}a-zA-Z0-9]+:)+ [A-Z]"; then pats=(
die "Start subject with a capital letter.\n" "^([-_,*(){}a-zA-Z0-9]+:)+ "
fi "[A-Z]"
if ! echo "$subject" | grep -qE "^([-_,*(){}a-zA-Z0-9]+:)+ [A-Z].*[^.]$"; then ".*[^.]$"
die "Remove punctuation mark from end.\n" )
fi msg=(
"Specify which program was modified. (e.g. \"zsh:p10k: <subject>\")\n"
"Start subject with a capital letter.\n"
"Remove punctuation mark from end.\n"
)
[[ ${#msg[@]} -ge ${#pats[@]} ]] || die "Something went wrong internally.\n"
for ((i = 0; i < ${#pats[@]}; i++)); do
if ! grep -qE "$(printf "%s" "${pats[@]:0:$i+1}")" <<<"$subject"; then
die "${msg[$i]}"
fi
done
BKP_IFS="$IFS" BKP_IFS="$IFS"
IFS=' IFS='
' '
for line in $body; do for line in $body; do
[ ${#line} -le 72 ] || die "Body lines too long. (<= 72)\n" [[ ${#line} -le 72 ]] || die "Body lines too long. (<= 72)\n"
done done
IFS="$BKP_IFS" IFS="$BKP_IFS"