You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.9 KiB
162 lines
4.9 KiB
#!/bin/bash |
|
|
|
set -e |
|
|
|
# It is not a good idea to include inc/releng_getopts.inc with the |
|
# master script as it calls the subordinate scripts and they include |
|
# this file too, and we want to avoid sharing variable with subshells |
|
|
|
SELF=$(basename "$0") |
|
GEN_DATA_DIR=releng_generated_data |
|
CLOG=${GEN_DATA_DIR}/log.${SELF} |
|
PASSED_OPTIONS="$@" |
|
RELENG_XORRISO= |
|
CLEANUP_LOG=0 |
|
|
|
############################################# |
|
while getopts “x:k:c:f:h” OPT |
|
do |
|
case $OPT in |
|
x) |
|
RELENG_XORRISO=$OPTARG |
|
;; |
|
c) |
|
CLEANUP_LOG=1 |
|
;; |
|
*) |
|
;; |
|
esac |
|
done |
|
|
|
if [ ! "${1}" ]; then |
|
cat << HLP |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
${SELF} runs executables from CWD starting |
|
with releng_*, passing them its own options. |
|
stdout/stderr output stored in: |
|
${CLOG} |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
self generated data are stored in ${GEN_DATA_DIR}. |
|
required space for these data is about 300 megabytes. |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
examples: |
|
# run xorriso and keep the self generated data |
|
$ ./${SELF} -x path/to/xorriso [-k1] |
|
|
|
# clean up self generated data from previous run |
|
$ ./${SELF} -c1 |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
HLP |
|
exit 31 |
|
fi |
|
|
|
######################################################## |
|
if [ -f "${CLOG}" ]; then |
|
mv "${CLOG}" "${CLOG}".prev |
|
fi |
|
> ${CLOG} |
|
if [ -x "${RELENG_XORRISO}" ]; then |
|
echo -e "_OVERVIEW_______________________________________________________________" >> ${CLOG} |
|
${RELENG_XORRISO} --version >> ${CLOG} |
|
echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ${CLOG} |
|
fi |
|
DSTART=`date --utc` |
|
printf "\n${SELF}: Started at ${DSTART}" |
|
E1=`date '+%s'` |
|
# require ^releng_, avoid running (your)self explicitly |
|
for s in `ls | grep ^releng_ | grep -v ${SELF} | sort -n`; do |
|
if [ -x ${s} -a ! -d ${s} ]; then |
|
# tee(1) does trailing \n, which is unwanted in that case |
|
printf "\n${SELF}: Running ./${s} ${PASSED_OPTIONS}..." |
|
echo -e "\n" >> ${CLOG} |
|
echo -e "_NEW_TEST_______________________________________________________________" >> ${CLOG} |
|
echo -e "${SELF}: Running ./${s} ${PASSED_OPTIONS}..." >> ${CLOG} |
|
echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ${CLOG} |
|
T1=`date '+%s'` |
|
set +e |
|
./${s} ${PASSED_OPTIONS} &>> ${CLOG} |
|
RET=$? |
|
T2=`date '+%s'` |
|
let TS="${T2} - ${T1}" |
|
case ${RET} in |
|
0) |
|
printf "done in ${TS} sec. ok." |
|
;; |
|
*) |
|
printf "done in ${TS} sec. " |
|
which tput >/dev/null 2>&1 && tput smso |
|
printf "FAIL -> EXIT CODE $RET" |
|
which tput >/dev/null 2>&1 && tput rmso |
|
;; |
|
esac |
|
set -e |
|
fi |
|
done |
|
|
|
DEND=`date --utc` |
|
printf "\n${SELF}: Stopped at ${DEND}." |
|
|
|
if [ "${CLEANUP_LOG}" -eq 1 ]; then |
|
if [ -f "${CLOG}" ]; then |
|
printf "\n${SELF}: Removed my own log ${CLOG}." |
|
rm -f "${CLOG}" |
|
fi |
|
if [ -f "${CLOG}".prev ]; then |
|
printf "\n${SELF}: Removed my own log ${CLOG}.prev." |
|
rm -f "${CLOG}".prev |
|
fi |
|
else |
|
E2=`date '+%s'` |
|
if [ ${E2} -eq ${E1} ]; then |
|
printf " Total elapsed 0 sec." |
|
else |
|
let ES="${E2} - ${E1}" |
|
printf " Total elapsed ${ES} sec." |
|
fi |
|
##### |
|
printf "\n${SELF}: Trivial log examination: ${CLOG}" |
|
printf "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" |
|
# severity classes of libdax_msgs.h in libburn and libisofs |
|
# List of boring keywords: |
|
# 'UPDATE' A pacifier message during long running operations. |
|
# List of interesting keywords: |
|
# thrown by xorriso and underlying libraries |
|
LIST_KWD="(NEVER|ABORT|FATAL|FAILURE|MISHAP|SORRY|WARNING|HINT|NOTE|DEBUG|ALL" |
|
# thrown by others |
|
LIST_KWD+="|FAIL|ERROR|WRONG)" |
|
|
|
if [ -f "${CLOG}" ]; then |
|
set +e |
|
# lines, perl regex, leading tabs |
|
grep -n -PT "${LIST_KWD}" "${CLOG}" |
|
RET_GREP="$?" |
|
case ${RET_GREP} in |
|
0) # found |
|
;; |
|
1) # not found |
|
printf "\n${SELF}: Log file looks clear.\n" |
|
;; |
|
*) # |
|
printf "\n${SELF}: grep returned EXIT CODE: ${RET_GREP}.\n" |
|
;; |
|
esac |
|
set -e |
|
fi |
|
printf "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" |
|
|
|
##### TODO: work out a less noisy diff'ing technique! |
|
if [ -f "${CLOG}".prev -a -f "${CLOG}" ]; then |
|
printf "${SELF}: See diff against previous log file (might be long):\n" |
|
printf "diff -Naur ${CLOG}.prev ${CLOG} | less" |
|
fi |
|
fi |
|
|
|
# |
|
which tput >/dev/null 2>&1 && tput smso |
|
printf "\n${SELF}: Leaving the following cruft in ${GEN_DATA_DIR}:\n" |
|
which tput >/dev/null 2>&1 && tput rmso |
|
|
|
ls -lth "${GEN_DATA_DIR}" |
|
|
|
# Fin |
|
exit 0
|
|
|