1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/headerguards/check.sh

98 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
# Copyright 2017 Kaspar Schleiser <kaspar@schleiser.de>
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
: "${RIOTBASE:=$(cd $(dirname $0)/../../../; pwd)}"
cd $RIOTBASE
: "${RIOTTOOLS:=${RIOTBASE}/dist/tools}"
. "${RIOTTOOLS}"/ci/changed_files.sh
. "${RIOTTOOLS}"/ci/github_annotate.sh
EXIT_CODE=0
filter() {
if [ $QUIET -eq 0 ]; then
cat
else
grep '^---' | cut -f 2 -d ' '
fi
}
_annotate_diff() {
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
github_annotate_error "$1" "$2" "Wrong header guard format:\n\n$3"
fi
}
_headercheck() {
OUT=$(${RIOTTOOLS}/headerguards/headerguards.py ${FILES} 2>&1 | filter)
if [ -n "$OUT" ]; then
EXIT_CODE=1
if github_annotate_is_on; then
DIFF=""
DIFFFILE=""
DIFFLINE=""
echo "$OUT" | {
# see https://stackoverflow.com/a/30064493/11921757 for why we
# use a sub shell here
while read line; do
# file has no or broken header guard
if echo "$line" | grep -q '^.*: no / broken header guard$'; then
# this output comes outside of a diff, so reset diff parser
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
DIFF=""
DIFFFILE=""
DIFFLINE=""
# annotate broken header guard
FILE=$(echo "$line" | cut -d: -f1 | xargs echo)
MESSAGE=$(echo "$line" | cut -d: -f2 | xargs echo)
github_annotate_error "$FILE" 0 "$MESSAGE"
# parse beginning of new diff
elif echo "$line" | grep -q '^--- .\+$'; then
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
DIFF="$line"
DIFFFILE=$(echo "$line" | sed 's/^--- \(.\+\)$/\1/g')
DIFFLINE=""
# we are in a diff currently
elif [ -n "$DIFF" ]; then
# grep first line number of diff including offset to
# comment _under_ diff
if echo "$line" | \
grep -q "@@ -[0-9]\+\(,[0-9]\+\)\? +[0-9]\+\(,[0-9]\+\)\? @@"
then
DIFFLINE="$(echo "$line" | sed 's/@@ -\([0-9]\+\).*$/\1/')"
fi
DIFF="$DIFF\n$line"
fi
done
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
}
else
echo "$OUT"
fi
fi
}
: ${FILES:=$(FILEREGEX='\.h$' changed_files)}
if [ -z "${FILES}" ]; then
exit
fi
github_annotate_setup
: ${QUIET:=0}
if [ -z "$*" ]; then
_headercheck
fi
github_annotate_teardown
exit $EXIT_CODE