diff options
Diffstat (limited to 'scripts/command/format-checker.sh')
-rwxr-xr-x | scripts/command/format-checker.sh | 95 |
1 files changed, 62 insertions, 33 deletions
diff --git a/scripts/command/format-checker.sh b/scripts/command/format-checker.sh index 5186b7476..75c345dd0 100755 --- a/scripts/command/format-checker.sh +++ b/scripts/command/format-checker.sh @@ -1,13 +1,23 @@ #!/bin/bash -function check_tools() { +function pushd () { + command pushd "$@" > /dev/null +} + +function popd () { + command popd "$@" > /dev/null +} + +function check_cpp_tool() { which clang-format-3.9 if [[ $? -ne 0 ]]; then echo "Error: clang-format-3.9 is not available." echo " Please install clang-format-3.9." exit 1 fi +} +function check_python_tool() { which yapf if [[ $? -ne 0 ]]; then echo "Error: yapf is not available." @@ -18,63 +28,82 @@ function check_tools() { function check_cpp_files() { DIRECTORIES_TO_BE_TESTED=$1 + DIRECTORIES_NOT_TO_BE_TESTED=$2 # Check c++ files - CPP_FILES_IN_COMPILER=$(find "${DIRECTORIES_TO_BE_TESTED[@]}" -iname '*.h' -o -iname '*.cpp' -o -iname '*.cc') - - if [[ ${#CPP_FILES_IN_COMPILER} -eq 0 ]]; then - echo "No cpp files to be checked" - return - fi - - CPP_FILES_TO_BE_TESTED=$(git ls-files $CPP_FILES_IN_COMPILER) - if [[ ${#CPP_FILES_TO_BE_TESTED} -eq 0 ]]; then - echo "No changed cpp files to be checked" - return - fi - - clang-format-3.9 -i $CPP_FILES_TO_BE_TESTED + for TEST_DIR in ${DIRECTORIES_TO_BE_TESTED[@]}; do + pushd $TEST_DIR + CPP_FILES_TO_CHECK=$(git ls-files '*.h' '*.cpp' '*.cc') + ARR=($CPP_FILES_TO_CHECK) + for s in ${DIRECTORIES_NOT_TO_BE_TESTED[@]}; do + if [[ $s = $TEST_DIR* ]]; then + skip=${s#$TEST_DIR/}/ + ARR=(${ARR[*]//$skip*}) + fi + done + CPP_FILES_TO_CHECK=${ARR[*]} + if [[ ${#CPP_FILES_TO_CHECK} -ne 0 ]]; then + clang-format-3.9 -i $CPP_FILES_TO_CHECK + fi + popd + done } function check_python_files() { DIRECTORIES_TO_BE_TESTED=$1 + DIRECTORIES_NOT_TO_BE_TESTED=$2 # Check python files - PYTHON_FILES_IN_COMPILER=$(find "${DIRECTORIES_TO_BE_TESTED[@]}" -iname '*.py') - - if [[ ${#PYTHON_FILES_IN_COMPILER} -eq 0 ]]; then - echo "No python files to be checked" - return - fi - - PYTHON_FILES_TO_BE_TESTED=$(git ls-files $PYTHON_FILES_IN_COMPILER) - if [[ ${#PYTHON_FILES_TO_BE_TESTED} -eq 0 ]]; then - echo "No changed python files to be checked" - return - fi - - yapf -i --style='{based_on_style: pep8, column_limit: 90}' $PYTHON_FILES_TO_BE_TESTED + for TEST_DIR in ${DIRECTORIES_TO_BE_TESTED[@]}; do + pushd $TEST_DIR + PYTHON_FILES_TO_CHECK=$(git ls-files '*.py') + ARR=($PYTHON_FILES_TO_CHECK) + for s in ${DIRECTORIES_NOT_TO_BE_TESTED[@]}; do + if [[ $s = $TEST_DIR* ]]; then + skip=${s#$TEST_DIR/}/ + ARR=(${ARR[*]//$skip*}) + fi + done + PYTHON_FILES_TO_CHECK=${ARR[*]} + if [[ ${#PYTHON_FILES_TO_CHECK} -ne 0 ]]; then + yapf -i --style='{based_on_style: pep8, column_limit: 90}' $PYTHON_FILES_TO_CHECK + fi + popd + done } echo "Make sure commit all changes before running this checker." -check_tools +__Check_CPP=${CHECK_CPP:-"1"} +__Check_PYTHON=${CHECK_PYTHON:-"1"} DIRECTORIES_TO_BE_TESTED=() +DIRECTORIES_NOT_TO_BE_TESTED=() for DIR_TO_BE_TESTED in $(find -name '.FORMATCHECKED' -exec dirname {} \;); do DIRECTORIES_TO_BE_TESTED+=("$DIR_TO_BE_TESTED") done +for DIR_NOT_TO_BE_TESTED in $(find -name '.FORMATDENY' -exec dirname {} \;); do + DIRECTORIES_NOT_TO_BE_TESTED+=("$DIR_NOT_TO_BE_TESTED") +done + if [[ ${#DIRECTORIES_TO_BE_TESTED[@]} -eq 0 ]]; then echo "No directories to be checked" exit 0 fi -check_cpp_files $DIRECTORIES_TO_BE_TESTED -check_python_files $DIRECTORIES_TO_BE_TESTED +if [[ $__Check_CPP -ne 0 ]]; then + check_cpp_tool + check_cpp_files $DIRECTORIES_TO_BE_TESTED $DIRECTORIES_NOT_TO_BE_TESTED +fi + +if [[ $__Check_PYTHON -ne 0 ]]; then + check_python_tool + check_python_files $DIRECTORIES_TO_BE_TESTED $DIRECTORIES_NOT_TO_BE_TESTED +fi -git diff > format.patch +git diff --ignore-submodules > format.patch PATCHFILE_SIZE=$(stat -c%s format.patch) if [[ $PATCHFILE_SIZE -ne 0 ]]; then echo "[FAILED] Format checker failed and update code to follow convention." |