perf: make pre-commit hooks pass file extensions

- shell-lint: faster evaluation of shell scripts, hook 40% faster;
- *-lint: unify method to find the "find" utility; and
- pre-commit: pass file extensions to lint tools.
This commit is contained in:
Ben Grande 2024-07-06 22:25:54 +02:00
parent 00a0b0f264
commit 35fa43dadf
No known key found for this signature in database
GPG key ID: 00C64E14F51F9E56
11 changed files with 65 additions and 82 deletions

View file

@ -1,7 +1,6 @@
#!/bin/sh
## SPDX-FileCopyrightText: 2018 Andreas Kusalananda <https://github.com/kusalaananda>
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
@ -10,34 +9,27 @@
# shellcheck disable=SC2086
set -eu
command -v shellcheck >/dev/null ||
{ printf >&2 "Missing program: shellcheck\n"; exit 1; }
command -v file >/dev/null ||
{ printf >&2 "Missing program: file\n"; exit 1; }
command -v git >/dev/null ||
{ printf "Missing program: git\n" >&2; exit 1; }
command -v git >/dev/null || { echo "Missing program: git" >&2; exit 1; }
cd "$(git rev-parse --show-toplevel)" || exit 1
./scripts/requires-program.sh shellcheck file
if command -v fd; then
find_tool="fd"
elif command -v fdfind >/dev/null; then
find_tool="fdfind"
fi
find_tool="$(./scripts/best-program.sh fd fdfind find)"
if test -n "${1-}"; then
files=""
sh_files=""
for f in "$@"; do
test -f "$f" || continue
if test "${f##*/}" = "rc.local"; then
sh_files="$sh_files $f"
continue
fi
case $( file -bi "$f" ) in
(*/x-shellscript*) files="$files $f";;
case "${f}" in
*/zsh/*) continue;;
*.yml|*.yaml|*.vim|*.sls|*.top|*.toml|*.timer|*.service|*.socket| \
*.spec|*/config|*.txt|*/version|*.sources|*.asc|*.repo) continue;;
*/rc.local) sh_files="$sh_files $f"; continue;;
*) files="$files $f"
esac
done
if test -n "$files" || test -n "$sh_files"; then
files="$(file $files | awk -F ":" '/ shell script,/{ print $1 }')"
if test -z "$files" && test -z "$sh_files"; then
exit 0
fi
test -z "$files" || shellcheck ${files}
@ -49,16 +41,13 @@ case "${find_tool}" in
fd|fdfind)
# shellcheck disable=2016,2215
files="$(${find_tool} . scripts/ salt/ --hidden --exclude=zsh --type=f \
--exec sh -c '
case $( file -bi "$1" ) in (*/x-shellscript*)
printf "%s\n" "$1";; esac' sh)"
--exec-batch file | awk -F ":" '/ shell script,/{ print $1 }')"
## No Shebang
sh_files="$(${find_tool} rc.local salt/ --type=f)"
;;
find)
files="$(find scripts/ salt/ -not \( -path "*/zsh" -prune \) -type f -exec sh -c '
case $( file -bi "$1" ) in (*/x-shellscript*) exit 0;; esac
exit 1' sh {} \; -print)"
files="$(find scripts/ salt/ -not \( -path "*/zsh" -prune \) -type f \
-exec file {} \+ | awk -F ":" '/ shell script,/{ print $1 }')"
## No Shebang
sh_files="$(find salt/ -type f -name "rc.local")"
;;
@ -66,5 +55,5 @@ esac
files="$(echo "$files" | sort -u)"
sh_files="$(echo "$sh_files" | sort -u)"
shellcheck ${files}
shellcheck -s sh ${sh_files}
test -z "${files}" || shellcheck ${files}
test -z "${sh_files}" || shellcheck -s sh ${sh_files}