diff --color-moved-ws: handle blank lines
[gitweb.git] / ci / print-test-failures.sh
index 4f261ddc012fb162b7d414b065fe251ceff91bee..d55460a21287018aafe8a4133dc5238e50496a36 100755 (executable)
@@ -8,13 +8,24 @@
 # Tracing executed commands would produce too much noise in the loop below.
 set +x
 
-if ! ls t/test-results/*.exit >/dev/null 2>/dev/null
+cd t/
+
+if ! ls test-results/*.exit >/dev/null 2>/dev/null
 then
        echo "Build job failed before the tests could have been run"
        exit
 fi
 
-for TEST_EXIT in t/test-results/*.exit
+case "$jobname" in
+osx-clang|osx-gcc)
+       # base64 in OSX doesn't wrap its output at 76 columns by
+       # default, but prints a single, very long line.
+       base64_opts="-b 76"
+       ;;
+esac
+
+combined_trash_size=0
+for TEST_EXIT in test-results/*.exit
 do
        if [ "$(cat "$TEST_EXIT")" != "0" ]
        then
@@ -23,5 +34,45 @@ do
                echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)"
                echo "------------------------------------------------------------------------"
                cat "${TEST_OUT}"
+
+               test_name="${TEST_EXIT%.exit}"
+               test_name="${test_name##*/}"
+               trash_dir="trash directory.$test_name"
+               trash_tgz_b64="trash.$test_name.base64"
+               if [ -d "$trash_dir" ]
+               then
+                       tar czp "$trash_dir" |base64 $base64_opts >"$trash_tgz_b64"
+
+                       trash_size=$(wc -c <"$trash_tgz_b64")
+                       if [ $trash_size -gt 1048576 ]
+                       then
+                               # larger than 1MB
+                               echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, it's too big$(tput sgr0)"
+                               continue
+                       fi
+
+                       new_combined_trash_size=$(($combined_trash_size + $trash_size))
+                       if [ $new_combined_trash_size -gt 1048576 ]
+                       then
+                               echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, there is plenty of trash in there already.$(tput sgr0)"
+                               continue
+                       fi
+                       combined_trash_size=$new_combined_trash_size
+
+                       # DO NOT modify these two 'echo'-ed strings below
+                       # without updating 'ci/util/extract-trash-dirs.sh'
+                       # as well.
+                       echo "$(tput setaf 1)Start of trash directory of '$test_name':$(tput sgr0)"
+                       cat "$trash_tgz_b64"
+                       echo "$(tput setaf 1)End of trash directory of '$test_name'$(tput sgr0)"
+               fi
        fi
 done
+
+if [ $combined_trash_size -gt 0 ]
+then
+       echo "------------------------------------------------------------------------"
+       echo "Trash directories embedded in this log can be extracted by running:"
+       echo
+       echo "  curl https://api.travis-ci.org/v3/job/$TRAVIS_JOB_ID/log.txt |./ci/util/extract-trash-dirs.sh"
+fi