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
This commit is contained in:
Maarten Bent
2021-02-10 20:28:07 +01:00
committed by Vadim Zeitlin
parent a6f6f5de27
commit 2161e5270f

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
cd `dirname "$0"`/../.. cd $(dirname "$0")/../..
find . \( \ find . \( \
-path './.git' -prune -o \ -path './.git' -prune -o \
@@ -13,23 +13,70 @@ find . \( \
-o -type f -print0 | -o -type f -print0 |
( (
while IFS= read -r -d '' file; do while IFS= read -r -d '' file; do
# skip binary files
case "$file" in case "$file" in
*.ani | *.bmp | *.chm | *.dia | *.gif | *.gz | *.hlp | *.icns | *.ico | *.jpg | *.mo | *.mpg | *.pcx | *.pdf | *.png | *.pnm | *.tga | *.tif | *.ttf | *.wav | *.zip ) *.ani | *.bmp | *.chm | *.cur | *.dia | *.gif | *.gz | *.hlp | *.icns | *.ico | *.jpg | *.mo | *.mpg | *.pcx | *.pdf | *.png | *.pnm | *.pyc | *.tga | *.tif | *.ttf | *.wav | *.zip )
continue continue
;; ;;
esac esac
# get used EOL
read dos unix mac <<< $(dos2unix --info=dum "$file" | awk '{print $1, $2, $3}') read dos unix mac <<< $(dos2unix --info=dum "$file" | awk '{print $1, $2, $3}')
if [[ "$dos" -eq "0" ]] && [[ "$unix" -eq "0" ]]; then if [[ "$dos" -eq 0 ]] && [[ "$unix" -eq 0 ]]; then
: :
elif [[ "$dos" -eq "0" ]] && [[ "$mac" -eq "0" ]]; then elif [[ "$dos" -eq 0 ]] && [[ "$mac" -eq 0 ]]; then
: :
elif [[ "$unix" -eq "0" ]] && [[ "$mac" -eq "0" ]]; then elif [[ "$unix" -eq 0 ]] && [[ "$mac" -eq 0 ]]; then
: :
else else
echo "$file has mixed EOL" 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)) rc=$((rc+1))
fi fi
done done
exit $rc exit $rc
) )