You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

format_source_code.sh 2.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. # Copyright 2019 Huawei Technologies Co., Ltd
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # ============================================================================
  16. set -e
  17. CLANG_FORMAT=$(which clang-format) || (echo "Please install 'clang-format' tool first"; exit 1)
  18. version=$("${CLANG_FORMAT}" --version | sed -n "s/.*\ \([0-9]*\)\.[0-9]*\.[0-9]*.*/\1/p")
  19. if [[ "${version}" -lt "8" ]]; then
  20. echo "clang-format's version must be at least 8.0.0"
  21. exit 1
  22. fi
  23. CURRENT_PATH=$(pwd)
  24. SCRIPTS_PATH=$(dirname "$0")
  25. echo "CURRENT_PATH=${CURRENT_PATH}"
  26. echo "SCRIPTS_PATH=${SCRIPTS_PATH}"
  27. # print usage message
  28. function usage()
  29. {
  30. echo "Format the specified source files to conform the code style."
  31. echo "Usage:"
  32. echo "bash $0 [-a] [-c] [-l] [-h]"
  33. echo "e.g. $0 -c"
  34. echo ""
  35. echo "Options:"
  36. echo " -a format of all files"
  37. echo " -c format of the files changed compared to last commit, default case"
  38. echo " -l format of the files changed in last commit"
  39. echo " -h Print usage"
  40. }
  41. # check and set options
  42. function checkopts()
  43. {
  44. # init variable
  45. mode="changed" # default format changed files
  46. # Process the options
  47. while getopts 'aclh' opt
  48. do
  49. case "${opt}" in
  50. a)
  51. mode="all"
  52. ;;
  53. c)
  54. mode="changed"
  55. ;;
  56. l)
  57. mode="lastcommit"
  58. ;;
  59. h)
  60. usage
  61. exit 0
  62. ;;
  63. *)
  64. echo "Unknown option ${opt}!"
  65. usage
  66. exit 1
  67. esac
  68. done
  69. }
  70. # init variable
  71. # check options
  72. checkopts "$@"
  73. # switch to project root path, which contains clang-format config file '.clang-format'
  74. cd "${SCRIPTS_PATH}/.." || exit 1
  75. FMT_FILE_LIST='__format_files_list__'
  76. if [[ "X${mode}" == "Xall" ]]; then
  77. find mindspore/{ccsrc,core,lite} -type f -name "*" | grep "\.h$\|\.cc$\|\.c$" > "${FMT_FILE_LIST}" || true
  78. elif [[ "X${mode}" == "Xchanged" ]]; then
  79. git diff --name-only | grep "mindspore/ccsrc\|mindspore/core\|mindspore/lite" | grep "\.h$\|\.cc$\|\.c$" > "${FMT_FILE_LIST}" || true
  80. else # "X${mode}" == "Xlastcommit"
  81. git diff --name-only HEAD~ HEAD | grep "mindspore/ccsrc\|mindspore/core\|mindspore/lite" | grep "\.h$\|\.cc$\|\.c$" > "${FMT_FILE_LIST}" || true
  82. fi
  83. while read line; do
  84. if [ -f "${line}" ]; then
  85. ${CLANG_FORMAT} -i "${line}"
  86. fi
  87. done < "${FMT_FILE_LIST}"
  88. rm "${FMT_FILE_LIST}"
  89. cd "${CURRENT_PATH}" || exit 1
  90. echo "Specified cpp source files have been format successfully."