This is an automated email from the ASF dual-hosted git repository.

aw pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/yetus.git


The following commit(s) were added to refs/heads/main by this push:
     new 941245b  YETUS-21. patch to a unit test should only trigger that unit 
test (#125)
941245b is described below

commit 941245bace0ccf2dcf7a1381029492ce4cca3e02
Author: Allen Wittenauer <a...@apache.org>
AuthorDate: Wed Sep 16 17:42:33 2020 -0700

    YETUS-21. patch to a unit test should only trigger that unit test (#125)
---
 precommit/src/main/shell/test-patch.d/maven.sh | 36 ++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/precommit/src/main/shell/test-patch.d/maven.sh 
b/precommit/src/main/shell/test-patch.d/maven.sh
index 77a69e8..51ae26a 100755
--- a/precommit/src/main/shell/test-patch.d/maven.sh
+++ b/precommit/src/main/shell/test-patch.d/maven.sh
@@ -27,6 +27,7 @@ MAVEN_CUSTOM_REPOS_DIR="@@@WORKSPACE@@@/yetus-m2"
 MAVEN_DEPENDENCY_ORDER=true
 MAVEN_FOUND_ROOT_POM=false
 MAVEN_JAVADOC_GOALS=("javadoc:javadoc")
+MAVEN_ONLY_CHANGED_TESTS=false
 
 add_test_type mvnsite
 add_build_tool maven
@@ -82,6 +83,7 @@ function maven_usage
   yetus_add_option "--mvn-custom-repos-dir=dir" "Location of repos, default is 
'${MAVEN_CUSTOM_REPOS_DIR}'"
   yetus_add_option "--mvn-deps-order=<bool>" "Disable maven's auto-dependency 
module ordering (Default: '${MAVEN_DEPENDENCY_ORDER}')"
   yetus_add_option "--mvn-javadoc-goals=<list>" "The comma-separated javadoc 
goals (Default: 'javadoc:javadoc')"
+  yetus_add_option "--mvn-only-changed-tests=<bool>" "If only Java test files 
are changed, just test them (Default: '${MAVEN_ONLY_CHANGED_TESTS}')"
   yetus_add_option "--mvn-settings=file" "File to use for settings.xml"
 }
 
@@ -115,6 +117,10 @@ function maven_parse_args
         delete_parameter "${i}"
         yetus_comma_to_array MAVEN_JAVADOC_GOALS "${i#*=}"
       ;;
+      ----mvn-only-changed-tests=*)
+        delete_parameter "${i}"
+        MAVEN_ONLY_CHANGED_TESTS=${i#*=}
+      ;;
       --mvn-settings=*)
         delete_parameter "${i}"
         MAVEN_SETTINGS=${i#*=}
@@ -561,6 +567,13 @@ function maven_builtin_personality_file_tests
 function maven_unit_test_filter()
 {
   declare filtered
+  declare line
+  declare file
+  declare dir
+  declare pkg
+  declare class
+  declare sclass
+  declare -a testonly
 
   if [[ -n "${UNIT_TEST_FILTER_FILE}" ]]; then
     while read -r line || [[ -n "${line}" ]]; do
@@ -570,6 +583,29 @@ function maven_unit_test_filter()
 
       filtered="${filtered}${line},"
     done < "${UNIT_TEST_FILTER_FILE}"
+  elif [[ "${BUILDMODE}" != 'full' ]] &&
+       [[ "${MAVEN_ONLY_CHANGED_TESTS}" == true ]]; then
+    for file in "${CHANGED_FILES[@]}"; do
+      if [[ "${file}" =~ src/test/java ]]; then
+        dir=$(dirname "${file}")
+        pkg=$(echo "${dir}" | "${SED}" -e 's,.*/src/test/java/,,g' -e 
's,/,.,g' )
+        sclass=$(basename "${file}")
+        sclass=${sclass%.java}
+        class="${pkg}.${sclass}"
+        if [[ -f "${file}" ]]; then
+          if "${GREP}" -q "package ${pkg}" "${file}"; then
+            if "${GREP}" -q "class ${sclass}" "${file}"; then
+              testonly+=("${class}")
+              filtered="${filtered}${class},"
+            fi
+          fi
+        fi
+      fi
+    done
+
+    if [[ ${#testonly[@]} -ne ${#CHANGED_FILES[@]} ]]; then
+      unset filtered
+    fi
   fi
 
   if [[ -z "${filtered}" ]]; then

Reply via email to