summaryrefslogtreecommitdiffstats
path: root/misc/scripts/file_format.sh
diff options
context:
space:
mode:
Diffstat (limited to 'misc/scripts/file_format.sh')
-rwxr-xr-xmisc/scripts/file_format.sh27
1 files changed, 17 insertions, 10 deletions
diff --git a/misc/scripts/file_format.sh b/misc/scripts/file_format.sh
index 3ff5798e22..94a3affbd7 100755
--- a/misc/scripts/file_format.sh
+++ b/misc/scripts/file_format.sh
@@ -7,14 +7,20 @@
# We need dos2unix and isutf8.
if [ ! -x "$(command -v dos2unix)" -o ! -x "$(command -v isutf8)" ]; then
printf "Install 'dos2unix' and 'isutf8' (moreutils package) to use this script.\n"
+ exit 1
fi
set -uo pipefail
-IFS=$'\n\t'
-# Loops through all text files tracked by Git.
-git grep -zIl '' |
-while IFS= read -rd '' f; do
+if [ $# -eq 0 ]; then
+ # Loop through all code files tracked by Git.
+ mapfile -d '' files < <(git grep -zIl '')
+else
+ # $1 should be a file listing file paths to process. Used in CI.
+ mapfile -d ' ' < <(cat "$1")
+fi
+
+for f in "${files[@]}"; do
# Exclude some types of files.
if [[ "$f" == *"csproj" ]]; then
continue
@@ -56,7 +62,7 @@ diff=$(git diff --color)
if [ ! -s utf8-validation.txt ] && [ -z "$diff" ] ; then
# If no UTF-8 violations were collected (the file is empty) and
# no diff has been generated all is OK, clean up, and exit.
- printf "Files in this commit comply with the formatting rules.\n"
+ printf "\e[1;32m*** Files in this commit comply with the file formatting rules.\e[0m\n"
rm -f utf8-validation.txt
exit 0
fi
@@ -65,7 +71,7 @@ if [ -s utf8-validation.txt ]
then
# If the file has content and is not empty, violations
# detected, notify the user, clean up, and exit.
- printf "\n*** The following files contain invalid UTF-8 character sequences:\n\n"
+ printf "\n\e[1;33m*** The following files contain invalid UTF-8 character sequences:\e[0m\n\n"
cat utf8-validation.txt
fi
@@ -73,10 +79,11 @@ rm -f utf8-validation.txt
if [ ! -z "$diff" ]
then
- printf "\n*** The following differences were found between the code "
- printf "and the formatting rules:\n\n"
- echo "$diff"
+ # A diff has been created, notify the user, clean up, and exit.
+ printf "\n\e[1;33m*** The following changes must be made to comply with the formatting rules:\e[0m\n\n"
+ # Perl commands replace trailing spaces with `·` and tabs with `<TAB>`.
+ printf "$diff\n" | perl -pe 's/(.*[^ ])( +)(\e\[m)$/my $spaces="·" x length($2); sprintf("$1$spaces$3")/ge' | perl -pe 's/(.*[^\t])(\t+)(\e\[m)$/my $tabs="<TAB>" x length($2); sprintf("$1$tabs$3")/ge'
fi
-printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+printf "\n\e[1;91m*** Please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\e[0m\n"
exit 1