wxWidgets/misc/scripts/check_mixed_eol.sh
Maarten Bent 2161e5270f Add check for expected line endings
Check that the EOL used in the file corresponds to the expected one for
its extension, in addition to checking that EOLs are consistent.

Closes https://github.com/wxWidgets/wxWidgets/pull/2228
2021-02-14 19:33:27 +01:00

83 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
cd $(dirname "$0")/../..
find . \( \
-path './.git' -prune -o \
-path './3rdparty' -prune -o \
-path './src/expat' -prune -o \
-path './src/jpeg' -prune -o \
-path './src/png' -prune -o \
-path './src/tiff' -prune -o \
-path './src/zlib' -prune \) \
-o -type f -print0 |
(
while IFS= read -r -d '' file; do
# skip binary files
case "$file" in
*.ani | *.bmp | *.chm | *.cur | *.dia | *.gif | *.gz | *.hlp | *.icns | *.ico | *.jpg | *.mo | *.mpg | *.pcx | *.pdf | *.png | *.pnm | *.pyc | *.tga | *.tif | *.ttf | *.wav | *.zip )
continue
;;
esac
# get used EOL
read dos unix mac <<< $(dos2unix --info=dum "$file" | awk '{print $1, $2, $3}')
if [[ "$dos" -eq 0 ]] && [[ "$unix" -eq 0 ]]; then
:
elif [[ "$dos" -eq 0 ]] && [[ "$mac" -eq 0 ]]; then
:
elif [[ "$unix" -eq 0 ]] && [[ "$mac" -eq 0 ]]; then
:
else
echo "ERROR - mixed EOL: $file"
rc=$((rc+1))
continue
fi
# empty file
if [[ "$dos" -eq 0 ]] && [[ "$unix" -eq 0 ]] && [[ "$mac" -eq 0 ]]; then
continue;
fi
# determine expected EOL
warn_expected_eol_unknown=0
case "$file" in
*.applescript | *.apspec | *.bkgen | *.bkl | *.c | *.C | *.cmake | *.cpp | *.css | *.cxx | *.guess | *.h | *.htm | *.html | *.iface | *.in | *.js | *.json | *.log | *.lua | *.m4 | *.mm | *.manifest | *.md | *.mk | *.mms | *.opt | *.patch | *.pbxproj | *.pl | *.plist | *.po | *.py | *.sh | *.sub | *.svg | *.tex | *.txt | *.TXT | *.unx | *.vms | *.xcconfig | *.xcscheme | *.xcworkspacedata | *.xbm | *.xml | *.xpm | *.xrc | *.yml )
expected_eoltype=unix
;;
*.bat | *.bcc | *.gcc | *.iss | *.props | *.rc | *.sln | *.vc | *.vcproj | *.vcxproj | *.vcxproj.filters )
expected_eoltype=dos
;;
* )
# warn_expected_eol_unknown=1
expected_eoltype=
;;
esac
# check for filename without extension
if [[ "$expected_eoltype" = "" ]]; then
fullfile=$(basename -- "$file")
if [[ "${fullfile:1}" != *"."* ]]; then
warn_expected_eol_unknown=0
expected_eoltype=unix
fi
fi
if [[ "$warn_expected_eol_unknown" -eq 1 ]]; then
echo "WARNING - no expected EOL specified: $file"
fi
# check if expected EOL matches used EOL
if [[ "$expected_eoltype" = "unix" ]] && [[ "$unix" -eq 0 ]]; then
echo "ERROR - wrong EOL, expected unix: $file"
rc=$((rc+1))
elif [[ "$expected_eoltype" = "dos" ]] && [[ "$dos" -eq 0 ]]; then
echo "ERROR - wrong EOL, expected dos: $file"
rc=$((rc+1))
fi
done
exit $rc
)