clang-uml/util/check_formatting.sh
2023-03-01 20:14:17 +01:00

53 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
##
## util/check_formatting.sh
##
## Copyright (c) 2021-2023 Bartek Kryza <bkryza@gmail.com>
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
shopt -s globstar
include_file_list() {
cat .clang-format-include | grep "^\+" | awk '{print $2}' \
| tr [:space:] '\n' | sort | uniq
}
ignore_file_list() {
echo $(cat .clang-format-include | grep "^\-" | awk '{print $2}') \
$(git ls-files --others --exclude-standard --ignored) \
| tr [:space:] '\n' | sort | uniq
}
valid_ignore_file_list() {
echo $(include_file_list) $(ignore_file_list) \
| tr [:space:] '\n' | sort | uniq -d
}
effective_file_list() {
echo $(include_file_list) $(valid_ignore_file_list) \
| tr [:space:] '\n' | sort | uniq -u
}
GIT_STATUS=$(git diff-index --quiet HEAD --)
EFFECTIVE_FILE_LIST=$(effective_file_list)
if [[ ${#EFFECTIVE_FILE_LIST[@]} -eq 0 ]]; then
echo ".clang-format-include patterns did not match any files."
exit 0
else
clang-format-15 --dry-run --Werror ${EFFECTIVE_FILE_LIST}
fi