@@ -23,8 +23,44 @@ SKIP_TESTS=false
23
23
if [ -z " $GOOGLE_APPLICATION_CREDENTIALS " ] ; then
24
24
SKIP_TESTS=true
25
25
fi
26
+
27
+ # Finds the closest parent dir that encompasses all changed files, and has a
28
+ # pom.xml
29
+ travis_changed_files_parent () {
30
+ [ -z " $TRAVIS_PULL_REQUEST " ] && return 0 # If we're not in a PR, forget it
31
+
32
+ (
33
+ set +e
34
+
35
+ changed=" $( git diff --name-only " $TRAVIS_COMMIT " " $TRAVIS_BRANCH " ) "
36
+ if [ $? -ne 0 ]; then
37
+ # Fall back to git head
38
+ changed=" $( git diff --name-only " $( git rev-parse HEAD) " " $TRAVIS_BRANCH " ) "
39
+ [ $? -ne 0 ] && return 0 # Give up. Just run everything.
40
+ fi
41
+
42
+ # Find the common prefix
43
+ prefix=" $( echo " $changed " | grep -v travis.sh | sed -e ' N;s/^\(.*\).*\n\1.*$/\1\n\1/;D' ) "
44
+
45
+ while [ ! -z " $prefix " ] && [ ! -r " $prefix /pom.xml" ] && [ " ${prefix%/* } " != " $prefix " ]; do
46
+ prefix=" ${prefix%/* } "
47
+ done
48
+
49
+ [ -r " $prefix /pom.xml" ] || return 0
50
+
51
+ echo " $prefix "
52
+ )
53
+ }
54
+
55
+ travis_changed_files_parent
56
+ common_travis_dir=" $( travis_changed_files_parent) "
57
+
58
+ [ -z " $common_travis_dir " ] || pushd " $common_travis_dir "
59
+
26
60
mvn --batch-mode clean verify -DskipTests=$SKIP_TESTS | egrep -v " (^\[INFO\] Download|^\[INFO\].*skipping)"
27
61
62
+ [ -z " $common_travis_dir " ] || popd
63
+
28
64
# Check that all shell scripts in this repo (including this one) pass the
29
65
# Shell Check linter.
30
66
shellcheck ./** /* .sh
@@ -44,7 +80,9 @@ test_localhost() {
44
80
appengine/datastore/indexes-perfect
45
81
)
46
82
for testdir in " ${devserver_tests[@]} " ; do
47
- ./java-repo-tools/scripts/test-localhost.sh appengine " ${testdir} "
83
+ if [ -z " $common_travis_dir " ] || [[ $testdir = $common_travis_dir * ]]; then
84
+ ./java-repo-tools/scripts/test-localhost.sh appengine " ${testdir} "
85
+ fi
48
86
done
49
87
50
88
# newplugin_std_tests=(
0 commit comments