coreboot-kgpe-d16/util/lint/lint-extended-015-final-newlines
Martin Roth d81debd946 util/lint: Update tools that use git to use a library
Each of the tools that used git had similar functionality. This combines
all of that into a single script that gets sourced by each.  This makes
maintenance much easier.

By doing this and updating each of the scripts to do the correct thing
if the script isn't being run in a git repository, it makes them work
much better for the releases, which are just released as a tarball,
without any attached git repository.

Change-Id: I61ba1cc4f7205e0d4baf993588bbc774120405cb
Signed-off-by: Martin Roth <martin@coreboot.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64973
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
2022-09-30 19:19:53 +00:00

67 lines
1.8 KiB
Bash
Executable file

#!/usr/bin/env sh
#
# SPDX-License-Identifier: GPL-2.0-only
# DESCR: Check that files end with a single newline
LINTDIR="$(
cd -- "$(dirname "$0")" > /dev/null 2>&1 || return
pwd -P
)"
# shellcheck source=helper_functions.sh
. "${LINTDIR}/helper_functions.sh"
PIDS=""
INCLUDED_DIRS_AND_FILES='util/* src/* payloads/* configs/* Makefile *.inc'
EXCLUDED_DIRS='src/vendorcode/\|cbfstool/lzma/\|cbfstool/lz4/\|Documentation/\|build/\|3rdparty/\|\.git/\|coreboot-builds/\|util/nvidia/cbootimage/'
EXCLUDED_FILES='\.gif$\|\.jpg$\|\.cksum$\|\.bin$\|\.vbt$\|\.hex$\|\.ico$\|\.o$\|\.bz2$\|\.xz$\|^.tmpconfig\|\.pyc$\|_shipped$\|sha256$\|\.png$\|\.patch$'
HAVE_FILE=$(command -v file 1>/dev/null 2>&1; echo $?)
is_eligible_executable() {
if [ "$HAVE_FILE" -ne 0 ]; then
return 1
fi
if { LC_ALL=C; file --brief "$filename" | grep -Eqw \
"^(Bourne shell|POSIX shell|Perl|Python) script"; };
then
return 0
else
return 1
fi
}
test_for_final_newline() {
while read filename; do
# Only check regular files and script executables
if [ -f "$filename" ] && { [ ! -x "$filename" ] || \
is_eligible_executable "$filename"; };
then
# Verify that there is a newline at the end
# $() strips trailing newlines
if [ -n "$(tail -c 1 "$filename")" ]; then
echo "$filename has no final newline."
# Verify that the file ends with only a single newline
# and that the file isn't empty
elif [ -z "$(tail -c 2 "$filename")" ] && \
[ -n "$(head -n 5 "$filename")" ]; then
echo "$filename has multiple final newlines."
fi
fi
done
}
for directory in $INCLUDED_DIRS_AND_FILES ; do
${FIND_FILES} "${directory}" | sed 's|^\./||' | sort | \
grep -v "$EXCLUDED_DIRS" | \
grep -v "$EXCLUDED_FILES" | \
test_for_final_newline &
PIDS="$PIDS $!"
done
# wait for tests to finish.
for pid in $PIDS; do
wait "$pid"
done