| #!/bin/bash |
| |
| # Copyright (c) 2020 Cisco and/or its affiliates. |
| # 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. |
| |
| set -eEo pipefail |
| |
| CLANG_FORMAT_VER=10 |
| GIT_DIFF_ARGS="-U0 --no-color --relative HEAD~1" |
| CLANG_FORMAT_DIFF_ARGS="-style file -p1" |
| SUFFIX="-${CLANG_FORMAT_VER}" |
| |
| clang-format${SUFFIX} --version |
| |
| in=$(mktemp) |
| git diff ${GIT_DIFF_ARGS} ':!*.patch' > ${in} |
| |
| line_count=$(sed -n '/^+.*\*INDENT-O[NF][F]\{0,1\}\*/p' ${in} | wc -l) |
| if [ ${line_count} -gt 0 ] ; then |
| echo |
| sed -n '/^+++ /{h}; /^+.*\*INDENT-O[NF][F]\{0,1\}\*/{x;p;x;p;}' ${in} |
| echo |
| echo "*******************************************************************" |
| echo "* CHECKSTYLE FAILED" |
| echo "* Please remove INDENT-ON and INDENT-OFF from modified lines." |
| echo "*******************************************************************" |
| rm ${in} |
| exit 1 |
| fi |
| |
| if [ "${1}" == "--fix" ]; then |
| cat ${in} | clang-format-diff${SUFFIX} ${CLANG_FORMAT_DIFF_ARGS} -i |
| filelist=$(sed -n 's/^+++ b\/\(.*\.[ch]\)/\1/p' ${in}) |
| git status ${filelist} |
| rm ${in} |
| exit 0 |
| fi |
| |
| line_count=$(sed -n '/^+.*\s\+$/p' ${in} | wc -l) |
| if [ ${line_count} -gt 0 ] ; then |
| echo |
| sed -n '/^+++/h; /^+.*\s\+$/{x;p;x;p;}' ${in} |
| echo |
| echo "*******************************************************************" |
| echo "* CHECKSTYLE FAILED" |
| echo "* Trailing whitespace detected" |
| echo "*******************************************************************" |
| rm ${in} |
| exit 1 |
| fi |
| |
| out=$(mktemp) |
| |
| cat ${in} | clang-format-diff${SUFFIX} ${CLANG_FORMAT_DIFF_ARGS} > ${out} |
| rm ${in} |
| |
| line_count=$(cat ${out} | wc -l) |
| |
| if [ -t 1 ] && [ -n $(tput colors) ] && [ $(tput colors) -ge 1 ] && \ |
| command -v highlight &> /dev/null ; then |
| highlight --syntax diff -O ansi ${out} |
| else |
| cat ${out} |
| fi |
| |
| rm ${out} |
| |
| if [ ${line_count} -gt 0 ] ; then |
| echo "*******************************************************************" |
| echo "* CHECKSTYLE FAILED" |
| echo "* CONSULT DIFF ABOVE" |
| echo "* NOTE: Running 'extras/scripts/checkstyle.sh --fix' *MAY* fix the issue" |
| echo "*******************************************************************" |
| exit 1 |
| else |
| echo "*******************************************************************" |
| echo "* CHECKSTYLE SUCCESSFULLY COMPLETED" |
| echo "*******************************************************************" |
| exit 0 |
| fi |