whitespace_test revision 0bdd8800c16f39b8fe308d20694ad905c669dff3
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#!/bin/bash
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenset -e -u -o pipefail
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen# An AWK regex matching tracked file paths to be excluded from the search.
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen# Example: '.*\.po|README'
02a54da28f376dd66d7939d8546a196a0045b486Timo SirainenPATH_EXCLUDE_REGEX='.*\.po|.*\.patch|.*\.diff|\/debian\/.*'
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainenexport GIT_DIR="$ABS_TOP_SRCDIR/.git"
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainenexport GIT_WORK_TREE="$ABS_TOP_SRCDIR"
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainenif [ ! -d "$GIT_DIR" ]; then
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen echo "Git repository is required for this test!" 1>&2
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen exit 77
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainenfi
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen{
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen # Look for lines with trailing whitespace in all files tracked by Git
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen git grep -n -I '\s\+$' -- "$(git rev-parse --show-toplevel)" ||
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen # Don't fail if no such lines were found anywhere
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen [[ $? == 1 ]]
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen} |
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen awk -- "
579e70631b8474d20fd3829f477c62950e5f9635Timo Sirainen BEGIN {
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainen found = 0
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen }
3809b9691c46926aa54968ac8e418d04361e1efaTimo Sirainen ! /^($PATH_EXCLUDE_REGEX):/ {
da9f6acdcb303d0fe5160b669668aedf39c8f45aTimo Sirainen if (!found) {
da9f6acdcb303d0fe5160b669668aedf39c8f45aTimo Sirainen print \"Trailing whitespace found:\"
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen found = 1
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen }
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen print
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen }
02a54da28f376dd66d7939d8546a196a0045b486Timo Sirainen END {
eb4d4f557fa75aa2a47639e9deb75a21f44eb42aTimo Sirainen exit found
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen }
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen "
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainendeclare found_file=false
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenwhile read file; do
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen [[ $file == "src/config/testconfigs/noparse.api.conf" ]] && continue
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen [[ $file =~ ^src/tests/cmocka/p11_nssdb.*/.*db ]] && continue
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen test `tail -c 1 $ABS_TOP_SRCDIR/$file` && \
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen echo "Missing new line at the eof: $file" && \
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen found_file=true
2f122b4db3f0d4eeb59ff9d306e54b2009d72cf9Timo Sirainendone < <(git ls-files)
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainenif $found_file; then
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen exit 1
e7ca5f820d6a1a8fe549a2966ac707a60e055ef4Timo Sirainenfi
7fb70daba4e571eab5b64f496d20b9e37e31141bTimo Sirainen