From c5ecb718ac9615ca2cb0ce331e8588f48cd83665 Mon Sep 17 00:00:00 2001 From: riking Date: Sun, 26 Aug 2018 09:47:05 -0700 Subject: [PATCH] Add Android code style enforcement to lint.sh This requires buildbot changes: the path to the Android Studio installation must be supplied in an environment variable. Modified files are copied out to a temporary directory, Android Studio is asked to format the files, and a git diff is performed. --- Source/Android/code-style-java.xml | 204 +++++++++++++++++++++++++++++ Tools/lint.sh | 41 ++++++ 2 files changed, 245 insertions(+) create mode 100644 Source/Android/code-style-java.xml diff --git a/Source/Android/code-style-java.xml b/Source/Android/code-style-java.xml new file mode 100644 index 0000000000..f51bcf3281 --- /dev/null +++ b/Source/Android/code-style-java.xml @@ -0,0 +1,204 @@ + + + + \ No newline at end of file diff --git a/Tools/lint.sh b/Tools/lint.sh index 795dfdd0b5..3fe608f613 100755 --- a/Tools/lint.sh +++ b/Tools/lint.sh @@ -41,6 +41,23 @@ if [ $FORCE -eq 0 ]; then fi fi +did_java_setup=0 +JAVA_CODESTYLE_FILE="./$(git rev-parse --show-cdup)/Source/Android/code-style-java.xml" +java_temp_dir="" + +function java_setup() { + if [ "$did_java_setup" = 1 ]; then + return + fi + if [ ! -x "${ANDROID_STUDIO_ROOT}/bin/format.sh" ]; then + echo >&2 "error: must set ANDROID_STUDIO_ROOT environment variable to the IDE installation directory (current: ${ANDROID_STUDIO_ROOT})" + exit 1 + fi + java_temp_dir="$(mktemp -d)" + trap "{ rm -r ${java_temp_dir}; }" EXIT + did_java_setup=1 +} + fail=0 # Default to staged files, unless a commit was passed. @@ -49,9 +66,29 @@ COMMIT=${1:---cached} # Get modified files (must be on own line for exit-code handling) modified_files=$(git diff --name-only --diff-filter=ACMRTUXB $COMMIT) +function java_check() { + echo >&0 "Java changes detected, running Android Studio formatter." || true + "${ANDROID_STUDIO_ROOT}/bin/format.sh" -s "${JAVA_CODESTYLE_FILE}" -R "${java_temp_dir}" >/dev/null + + # ignore 'added'/'deleted' files, we copied only files of interest to the tmpdir + d=$(git diff --diff-filter=ad . "${java_temp_dir}" || true) + if ! [ -z "${d}" ]; then + echo "!!! Java code is not compliant to coding style, here is the fix:" + echo "${d}" + fail=1 + fi +} + # Loop through each modified file. for f in ${modified_files}; do # Filter them. + if echo "${f}" | egrep -q "[.]java$"; then + # Copy Java files to a temporary directory + java_setup + mkdir -p $(dirname "${java_temp_dir}/${f}") + cp "${f}" "${java_temp_dir}/${f}" + continue + fi if ! echo "${f}" | egrep -q "[.](cpp|h|mm)$"; then continue fi @@ -76,4 +113,8 @@ for f in ${modified_files}; do fi done +if [ "${did_java_setup}" = 1 ]; then + java_check +fi + exit ${fail}