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 ""
|
|
}
|