#!/bin/sh
# This file is part of the coreboot project.
#
# Copyright (C) 2016 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# DESCR: Check that files end with a single newline

LC_ALL=C export LC_ALL

PIDS=""
INCLUDED_DIRS_AND_FILES='util/* src/* payloads/* configs/* Makefile *.inc'
EXCLUDED_DIRS='src/vendorcode/\|util/romcc/\|cbfstool/lzma/\|cbfstool/lz4/\|Documentation/\|build/\|3rdparty/\|\.git/\|coreboot-builds/\|util/nvidia/cbootimage/'
EXCLUDED_FILES='\.jpg$\|\.cksum$\|\.bin$\|\.vbt$\|\.hex$\|\.ico$\|\.o$\|\.bz2$\|\.xz$\|^.tmpconfig\|\.pyc$\|_shipped$\|sha256$\|\.png$\|\.patch$'

# Use git ls-files if the code is in a git repo, otherwise use find.
if [ -n "$(command -v git)" ] && \
	[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]
then
	FIND_FILES="git ls-files"
else
	FIND_FILES="find"
fi

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
