84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # private variable to track folds within this script
 | |
| travisFoldStack=()
 | |
| 
 | |
| function travisFoldStart() {
 | |
|   local foldName="${0#./}  ${1}"
 | |
|   # get current time as nanoseconds since the beginning of the epoch
 | |
|   foldStartTime=$(date +%s%N)
 | |
|   # convert all non alphanum chars except for "-" and "." to "--"
 | |
|   local sanitizedFoldName=${foldName//[^[:alnum:]\-\.]/--}
 | |
|   # strip trailing "-"
 | |
|   sanitizedFoldName=${sanitizedFoldName%-}
 | |
|   # push the foldName onto the stack
 | |
|   travisFoldStack+=("${sanitizedFoldName}|${foldStartTime}")
 | |
| 
 | |
|   echo ""
 | |
|   if [[ ${TRAVIS:-} ]]; then
 | |
|     echo "travis_fold:start:${sanitizedFoldName}"
 | |
|     echo "travis_time:start:${sanitizedFoldName}"
 | |
|   fi
 | |
|   local enterArrow="===>  ${foldName}  ==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>==>"
 | |
|   # keep all messages consistently wide 80chars regardless of the foldName
 | |
|   echo ${enterArrow:0:100}
 | |
|   if [[ ${2:-} != "no-xtrace" ]]; then
 | |
|     # turn on verbose mode so that we have better visibility into what's going on
 | |
|     # http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html#table_02_01
 | |
|     set -x
 | |
|   fi
 | |
| }
 | |
| 
 | |
| function travisFoldEnd() {
 | |
|   set +x
 | |
|   local foldName="${0#./}  ${1}"
 | |
|   # convert all non alphanum chars except for "-" and "." to "--"
 | |
|   local sanitizedFoldName=${foldName//[^[:alnum:]\-\.]/--}
 | |
|   # strip trailing "-"
 | |
|   sanitizedFoldName=${sanitizedFoldName%-}
 | |
| 
 | |
|   # consult and update travisFoldStack
 | |
|   local lastFoldIndex=$(expr ${#travisFoldStack[@]} - 1)
 | |
|   local lastFoldString=${travisFoldStack[$lastFoldIndex]}
 | |
|   # split the string by | and then turn that into an array
 | |
|   local lastFoldArray=(${lastFoldString//\|/ })
 | |
|   local lastSanitizedFoldName=${lastFoldArray[0]}
 | |
| 
 | |
|   if [[ ${TRAVIS:-} ]]; then
 | |
|     local lastFoldStartTime=${lastFoldArray[1]}
 | |
|     local foldFinishTime=$(date +%s%N)
 | |
|     local foldDuration=$(expr ${foldFinishTime} - ${lastFoldStartTime})
 | |
| 
 | |
|     # write into build-perf.log file
 | |
|     local logIndent=$(expr ${lastFoldIndex} \* 2)
 | |
|     printf "%6ss%${logIndent}s: %s\n" $(expr ${foldDuration} / 1000000000) " " "${foldName}" >> ${LOGS_DIR}/build-perf.log
 | |
|   fi
 | |
| 
 | |
|   # pop
 | |
|   travisFoldStack=(${travisFoldStack[@]:0:lastFoldIndex})
 | |
| 
 | |
|   # check for misalignment
 | |
|   if [[ ${lastSanitizedFoldName} != ${sanitizedFoldName} ]]; then
 | |
|     echo "Travis fold mis-alignment detected! travisFoldEnd expected sanitized fold name '${lastSanitizedFoldName}', but received '${sanitizedFoldName}' (after sanitization)"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   local returnArrow="<===  ${foldName}  <==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<=="
 | |
|   # keep all messages consistently wide 80chars regardless of the foldName
 | |
|   echo ${returnArrow:0:100}
 | |
|   echo ""
 | |
|   if [[ ${TRAVIS:-} ]]; then
 | |
|     echo "travis_time:end:${sanitizedFoldName}:start=${lastFoldStartTime},finish=${foldFinishTime},duration=${foldDuration}"
 | |
|     echo "travis_fold:end:${sanitizedFoldName}"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| 
 | |
| function travisFoldReturnArrows() {
 | |
|   # print out return arrows so that it's easy to see the end of the script in the log
 | |
|   echo ""
 | |
|   returnArrow="<===  ${0#./}  <==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<=="
 | |
|   # keep all messages consistently wide 80chars regardless of the foldName
 | |
|   echo ${returnArrow:0:100}
 | |
|   echo "<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==<==="
 | |
|   echo ""
 | |
| }
 |