From 6233337560918b90addc9b6dbfc38abbc0c41e1f Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Sun, 30 Aug 2020 20:02:35 -0400 Subject: [PATCH] [releng] Split up check_code_cleanliness script As more checks have been added it has gotten a little unweildy. The new script "do_all_code_cleanups.sh" now does most of the code formatting checks. Change-Id: I65fd888c88e1d7e470ed5621cee18ff3bf6680b4 --- releng/scripts/check_code_cleanliness.sh | 156 +----------------- .../do_add_all_file_types_to_gitattributes.sh | 14 ++ releng/scripts/do_all_code_cleanups.sh | 10 ++ releng/scripts/do_format_code.sh | 23 +++ releng/scripts/do_project_settings.sh | 98 +++++++++++ releng/scripts/do_rebuild_natives.sh | 30 ++++ .../scripts/do_remove_trailing_whitespace.sh | 14 ++ 7 files changed, 192 insertions(+), 153 deletions(-) create mode 100755 releng/scripts/do_add_all_file_types_to_gitattributes.sh create mode 100755 releng/scripts/do_all_code_cleanups.sh create mode 100755 releng/scripts/do_format_code.sh create mode 100755 releng/scripts/do_project_settings.sh create mode 100755 releng/scripts/do_rebuild_natives.sh create mode 100755 releng/scripts/do_remove_trailing_whitespace.sh diff --git a/releng/scripts/check_code_cleanliness.sh b/releng/scripts/check_code_cleanliness.sh index 640e75e1820..0b0828ca465 100755 --- a/releng/scripts/check_code_cleanliness.sh +++ b/releng/scripts/check_code_cleanliness.sh @@ -8,161 +8,11 @@ set -e DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) ${DIR}/check_features.sh -#!/bin/bash - ## -# This script is reused by other projects, if so, COREPROJECT should be set -# to the project to use a basis for project settings +# The next set of scripts automatically apply formatting and other rules +# to CDT. At the end of this, git repo is checked for no diffs. ## -: ${COREPROJECT:=core/org.eclipse.cdt.core} - -## -# Format code -## -: ${ECLIPSE:=~/buildtools/eclipse-SDK-4.13/eclipse} -test ! -e check_code_cleanliness_workspace -${ECLIPSE} \ - -consolelog -nosplash -application org.eclipse.jdt.core.JavaCodeFormatter \ - -config $PWD/$COREPROJECT/.settings/org.eclipse.jdt.core.prefs \ - $PWD -data check_code_cleanliness_workspace -rm -rf check_code_cleanliness_workspace - -## -# Remove trailing whitespace. -# The .gitattributes is used as a filter to identify files to check. Patters with -# this "# check trailing whitespace" on the line before are checked -## -awk '/# remove trailing whitespace/{getline; print $1}' .gitattributes | - while read i ; do - echo "Removing trailing whitespace on $i files" - git ls-files -- "$i" | xargs --no-run-if-empty sed -i 's/[ \t]*$//' - done - -## -# Add all file types to .gitattributes -## -git ls-files | sed -E '-es@^.*/([^/]+)$@\1@' '-es@.+\.@\\\*\\.@' | sort -u | while read i ; do - if ! grep "^$i " .gitattributes > /dev/null - then - echo "MISSING $i in .gitattributes, adding as text, check if that is correct" - echo "$i text # automatically added - please verify" >> .gitattributes - fi -done - -## -# Setup Eclipse Core Preferences -## -git ls-files -- \*\*/.project | while read i ; do - d=`dirname $i`; - mkdir -p $d/.settings - if ! test -e $d/.settings/org.eclipse.core.resources.prefs; then - echo 'eclipse.preferences.version=1' > $d/.settings/org.eclipse.core.resources.prefs - echo 'encoding/=UTF-8' >> $d/.settings/org.eclipse.core.resources.prefs - fi - if ! grep 'encoding/=UTF-8' $d/.settings/org.eclipse.core.resources.prefs > /dev/null; then - echo 'encoding/=UTF-8' >> $d/.settings/org.eclipse.core.resources.prefs - fi - if ! grep 'eclipse.preferences.version=1' $d/.settings/org.eclipse.core.resources.prefs > /dev/null; then - echo 'eclipse.preferences.version=1' >> $d/.settings/org.eclipse.core.resources.prefs - fi -done - -## -# Copy JDT/PDE preferences -## -git ls-files -- \*\*/.project ":!$COREPROJECT/.project" | while read i ; do - d=`dirname $i`; - natures=$(xmllint --xpath 'string(//projectDescription/natures)' $i) - mkdir -p $d/.settings - - # JDT - if [[ $natures == *"org.eclipse.jdt.core.javanature"* ]]; then - cp $COREPROJECT/.settings/org.eclipse.jdt.* $d/.settings - # For test plug-ins we are more lenient so don't warn on some items - if echo $i | grep -E '\.tests?[/\.]' > /dev/null; then - sed -i \ - '-es@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.discouragedReference=warning@org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.deprecation=warning@org.eclipse.jdt.core.compiler.problem.deprecation=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.discouragedReference=warning@org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.emptyStatement=warning@org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.fieldHiding=warning@org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning@org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.forbiddenReference=error@org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning@' \ - '-es@org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning@org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.unusedLocal=warning@org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning@org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning@org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning@org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore@' \ - '-es@org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning@org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore@' \ - $d/.settings/org.eclipse.jdt.core.prefs - fi - if echo $i | grep 'org.eclipse.cdt.examples.dsf' > /dev/null; then - sed -i \ - '-es@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore@' \ - $d/.settings/org.eclipse.jdt.core.prefs - fi - else - rm -f $d/.settings/org.eclipse.jdt*.prefs - fi - - # PDE - if [[ $natures == *"org.eclipse.pde.PluginNature"* ]]; then - cp $COREPROJECT/.settings/org.eclipse.pde.prefs $d/.settings - cp $COREPROJECT/.settings/org.eclipse.pde.api.tools.prefs $d/.settings - if echo $i | grep -E '\.tests?[/\.]' > /dev/null; then - sed -i \ - '-es@compilers.p.not-externalized-att=1@compilers.p.not-externalized-att=2@' \ - $d/.settings/org.eclipse.pde.prefs - fi - else - rm -f $d/.settings/org.eclipse.pde*.prefs - fi -done - -## -# Verify API Tooling is enabled for all non-test/example bundles -## -git ls-files -- \*\*/.project | while read i ; do - d=`dirname $i`; - natures=$(xmllint --xpath 'string(//projectDescription/natures)' $i) - if [[ $natures == *"org.eclipse.pde.PluginNature"* ]] && [[ $natures == *"org.eclipse.jdt.core.javanature"* ]]; then - if [[ $natures != *"org.eclipse.pde.api.tools.apiAnalysisNature"* ]]; then - if ! echo $i | grep -E '\.tests?[/\.]' > /dev/null && ! echo $i | grep -E '\.examples?[/\.]' > /dev/null; then - echo "$d is missing API Tools Nature - Turn it on in Eclipse by 1) Right-click project 2) Plug-in tools -> API Tools Setup" - exit 1 - fi - fi - fi -done - - -## -# Make sure that natives are up to date -## -for p in native/org.eclipse.cdt.native.serial core/org.eclipse.cdt.core.native; do - echo "Rebuilding $p JNI headers to make sure they match source" - logfile=jni-headers-${p//\//-}.log - if ! ${MVN:-mvn} -B -V process-resources -DuseSimrelRepo -P jniheaders -f $p >${logfile} 2>&1; then - echo "Rebuilding of $p JNI headers failed. The log (${logfile}) is part of the artifacts of the build" - exit 1 - fi - - echo "Rebuilding $p natives to make sure they match source" - logfile=make-natives-${p//\//-}.log - if ! make -C $p/native_src rebuild >${logfile} 2>&1; then - echo "Rebuilding of $p natives failed. The log (${logfile}) is part of the artifacts of the build" - exit 1 - fi -done - -## -# Mark Windows binaries as executable -## -echo "Marking Windows binaries as executable" -git ls-files -- \*.exe \*.dll | while read line; do - chmod +x "$line" -done +${DIR}/do_all_code_cleanups.sh ## # Check that none of the above caused any changes diff --git a/releng/scripts/do_add_all_file_types_to_gitattributes.sh b/releng/scripts/do_add_all_file_types_to_gitattributes.sh new file mode 100755 index 00000000000..90593a72166 --- /dev/null +++ b/releng/scripts/do_add_all_file_types_to_gitattributes.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +## +# Add all file types to .gitattributes +## +git ls-files | sed -E '-es@^.*/([^/]+)$@\1@' '-es@.+\.@\\\*\\.@' | sort -u | while read i ; do + if ! grep "^$i " .gitattributes > /dev/null + then + echo "MISSING $i in .gitattributes, adding as text, check if that is correct" + echo "$i text # automatically added - please verify" >> .gitattributes + fi +done diff --git a/releng/scripts/do_all_code_cleanups.sh b/releng/scripts/do_all_code_cleanups.sh new file mode 100755 index 00000000000..3b117b7f1fe --- /dev/null +++ b/releng/scripts/do_all_code_cleanups.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -e + +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +${DIR}/do_format_code.sh +${DIR}/do_remove_trailing_whitespace.sh +${DIR}/do_add_all_file_types_to_gitattributes.sh +${DIR}/do_project_settings.sh +${DIR}/do_rebuild_natives.sh diff --git a/releng/scripts/do_format_code.sh b/releng/scripts/do_format_code.sh new file mode 100755 index 00000000000..46b284b1cf1 --- /dev/null +++ b/releng/scripts/do_format_code.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +## +# This script is reused by other projects, if so, COREPROJECT should be set +# to the project to use a basis for project settings +## +: ${COREPROJECT:=core/org.eclipse.cdt.core} + +## +# Format code +## +: ${ECLIPSE:=~/buildtools/eclipse-SDK-4.13/eclipse} +if test -e check_code_cleanliness_workspace; then + echo check_code_cleanliness_workspace needs to be deleted + exit 1 +fi +${ECLIPSE} \ + -consolelog -nosplash -application org.eclipse.jdt.core.JavaCodeFormatter \ + -config $PWD/$COREPROJECT/.settings/org.eclipse.jdt.core.prefs \ + $PWD -data check_code_cleanliness_workspace +rm -rf check_code_cleanliness_workspace diff --git a/releng/scripts/do_project_settings.sh b/releng/scripts/do_project_settings.sh new file mode 100755 index 00000000000..9bc40fe40c9 --- /dev/null +++ b/releng/scripts/do_project_settings.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +set -e + + +## +# This script is reused by other projects, if so, COREPROJECT should be set +# to the project to use a basis for project settings +## +: ${COREPROJECT:=core/org.eclipse.cdt.core} + +## +# Setup Eclipse Core Preferences +## +git ls-files -- \*\*/.project | while read i ; do + d=`dirname $i`; + mkdir -p $d/.settings + if ! test -e $d/.settings/org.eclipse.core.resources.prefs; then + echo 'eclipse.preferences.version=1' > $d/.settings/org.eclipse.core.resources.prefs + echo 'encoding/=UTF-8' >> $d/.settings/org.eclipse.core.resources.prefs + fi + if ! grep 'encoding/=UTF-8' $d/.settings/org.eclipse.core.resources.prefs > /dev/null; then + echo 'encoding/=UTF-8' >> $d/.settings/org.eclipse.core.resources.prefs + fi + if ! grep 'eclipse.preferences.version=1' $d/.settings/org.eclipse.core.resources.prefs > /dev/null; then + echo 'eclipse.preferences.version=1' >> $d/.settings/org.eclipse.core.resources.prefs + fi +done + +## +# Copy JDT/PDE preferences +## +git ls-files -- \*\*/.project ":!$COREPROJECT/.project" | while read i ; do + d=`dirname $i`; + natures=$(xmllint --xpath 'string(//projectDescription/natures)' $i) + mkdir -p $d/.settings + + # JDT + if [[ $natures == *"org.eclipse.jdt.core.javanature"* ]]; then + cp $COREPROJECT/.settings/org.eclipse.jdt.* $d/.settings + # For test plug-ins we are more lenient so don't warn on some items + if echo $i | grep -E '\.tests?[/\.]' > /dev/null; then + sed -i \ + '-es@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.discouragedReference=warning@org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.deprecation=warning@org.eclipse.jdt.core.compiler.problem.deprecation=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.discouragedReference=warning@org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.emptyStatement=warning@org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.fieldHiding=warning@org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning@org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.forbiddenReference=error@org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning@' \ + '-es@org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning@org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.unusedLocal=warning@org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning@org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning@org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning@org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore@' \ + '-es@org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning@org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore@' \ + $d/.settings/org.eclipse.jdt.core.prefs + fi + if echo $i | grep 'org.eclipse.cdt.examples.dsf' > /dev/null; then + sed -i \ + '-es@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning@org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore@' \ + $d/.settings/org.eclipse.jdt.core.prefs + fi + else + rm -f $d/.settings/org.eclipse.jdt*.prefs + fi + + # PDE + if [[ $natures == *"org.eclipse.pde.PluginNature"* ]]; then + cp $COREPROJECT/.settings/org.eclipse.pde.prefs $d/.settings + cp $COREPROJECT/.settings/org.eclipse.pde.api.tools.prefs $d/.settings + if echo $i | grep -E '\.tests?[/\.]' > /dev/null; then + sed -i \ + '-es@compilers.p.not-externalized-att=1@compilers.p.not-externalized-att=2@' \ + $d/.settings/org.eclipse.pde.prefs + fi + else + rm -f $d/.settings/org.eclipse.pde*.prefs + fi +done + +## +# Verify API Tooling is enabled for all non-test/example bundles +## +git ls-files -- \*\*/.project | while read i ; do + d=`dirname $i`; + natures=$(xmllint --xpath 'string(//projectDescription/natures)' $i) + if [[ $natures == *"org.eclipse.pde.PluginNature"* ]] && [[ $natures == *"org.eclipse.jdt.core.javanature"* ]]; then + if [[ $natures != *"org.eclipse.pde.api.tools.apiAnalysisNature"* ]]; then + if ! echo $i | grep -E '\.tests?[/\.]' > /dev/null && ! echo $i | grep -E '\.examples?[/\.]' > /dev/null; then + echo "$d is missing API Tools Nature - Turn it on in Eclipse by 1) Right-click project 2) Plug-in tools -> API Tools Setup" + exit 1 + fi + fi + fi +done + diff --git a/releng/scripts/do_rebuild_natives.sh b/releng/scripts/do_rebuild_natives.sh new file mode 100755 index 00000000000..0e68bab2c5b --- /dev/null +++ b/releng/scripts/do_rebuild_natives.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -e + +## +# Make sure that natives are up to date +## +for p in native/org.eclipse.cdt.native.serial core/org.eclipse.cdt.core.native; do + echo "Rebuilding $p JNI headers to make sure they match source" + logfile=jni-headers-${p//\//-}.log + if ! ${MVN:-mvn} -B -V process-resources -DuseSimrelRepo -P jniheaders -f $p >${logfile} 2>&1; then + echo "Rebuilding of $p JNI headers failed. The log (${logfile}) is part of the artifacts of the build" + exit 1 + fi + + echo "Rebuilding $p natives to make sure they match source" + logfile=make-natives-${p//\//-}.log + if ! make -C $p/native_src rebuild >${logfile} 2>&1; then + echo "Rebuilding of $p natives failed. The log (${logfile}) is part of the artifacts of the build" + exit 1 + fi +done + +## +# Mark Windows binaries as executable +## +echo "Marking Windows binaries as executable" +git ls-files -- \*.exe \*.dll | while read line; do + chmod +x "$line" +done diff --git a/releng/scripts/do_remove_trailing_whitespace.sh b/releng/scripts/do_remove_trailing_whitespace.sh new file mode 100755 index 00000000000..0ad42889d98 --- /dev/null +++ b/releng/scripts/do_remove_trailing_whitespace.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +## +# Remove trailing whitespace. +# The .gitattributes is used as a filter to identify files to check. Patters with +# this "# check trailing whitespace" on the line before are checked +## +awk '/# remove trailing whitespace/{getline; print $1}' .gitattributes | + while read i ; do + echo "Removing trailing whitespace on $i files" + git ls-files -- "$i" | xargs --no-run-if-empty sed -i 's/[ \t]*$//' + done