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

106 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
RIOTBASE=$(git rev-parse --show-toplevel)
CURDIR=$(cd "$(dirname "$0")" && pwd)
UNCRUSTIFY_CFG="$RIOTBASE"/uncrustify-riot.cfg
WHITELIST=$CURDIR/whitelist.txt
BLACKLIST=$CURDIR/blacklist.txt
. "$RIOTBASE"/dist/tools/ci/changed_files.sh
. "$RIOTBASE"/dist/tools/ci/github_annotate.sh
# only consider whitelisted stuff, then filter out blacklist
# note: this also applies changed_files' default filter
FILES=$(changed_files | grep -xf "$WHITELIST" | grep -xvf "$BLACKLIST")
check () {
for F in $FILES
do
uncrustify -c "$UNCRUSTIFY_CFG" -f "$RIOTBASE/$F" \
--check > /dev/null 2>&1 || {
echo "file $F needs to be uncrustified."
echo "Please run 'dist/tools/uncrustify/uncrustify.sh'"
# Disable error until versioning issue is sorted out.
#exit 1
exit 0
}
done
echo "All files are uncrustified!"
}
_annotate_diff() {
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
MSG="Uncrustify proposes the following patch:\n\n$3"
IFS="${OLD_IFS}" github_annotate_warning "$1" "$2" "${MSG}"
fi
}
exec_uncrustify () {
if [ "$(git diff HEAD)" ] ; then
echo "Please commit all changes before running uncrustify.sh"
exit 1
fi
for F in $FILES
do
uncrustify -c "$UNCRUSTIFY_CFG" --no-backup "$RIOTBASE/$F"
done
if github_annotate_is_on; then
DIFF=""
DIFFFILE=""
DIFFLINE=""
git diff HEAD | {
# see https://stackoverflow.com/a/30064493/11921757 for why we
# use a sub shell here
OLD_IFS="$IFS" # store old separator to later restore it
IFS='' # keep leading and trailing spaces
while read -r line; do
# parse beginning of new diff
if echo "$line" | grep -q '^--- .\+$'; then
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
DIFF="$line"
DIFFFILE=$(echo "$line" |
sed 's#^--- \([ab]/\)\?\(.\+\)$#\2#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
# treat hunk as new diff so it is at the corresponding line
if [ -n "${DIFFLINE}" ]; then
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
DIFF="--- $DIFFFILE\n+++ $DIFFFILE"
fi
DIFFLINE="$(echo "$line" | sed 's/@@ -\([0-9]\+\).*$/\1/')"
# Parse
# @@ -<DIFFLINE>,<DIFFOFFSET> ...
DIFFOFFSET="$(echo "$line" |
sed 's/@@ -[0-9]\+\(,\([0-9]\+\)\)\?.*$/\2/')"
if [ -n "$DIFFOFFSET" ]; then
# if there is a DIFFOFFSET, add it to
# DIFFLINE. DIFFLINE starts at 1, so we
# need to subtract 1 to not overshoot.
DIFFLINE=$(( DIFFLINE + DIFFOFFSET - 1 ))
fi
fi
DIFF="$DIFF\n${line//\\/\\\\}"
fi
done
_annotate_diff "$DIFFFILE" "$DIFFLINE" "$DIFF"
}
else
echo "$OUT"
fi
}
if [ "$1" == "--check" ] ; then
check
else
github_annotate_setup
exec_uncrustify
github_annotate_teardown
fi