1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#!/bin/sh 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Automated build and test for Valgrind. Compares Valgrind from 24 hours 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# ago with the current one. See the README.txt on how to run it. 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Helper functions 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Returns the revision number of the source files with date $1. 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovget_svn_revision() { 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (cd $DIR; rm -rf infodir; 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov svn co -r "{$1}" "${valgrind_svn_repo}/nightly" infodir > /dev/null; 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov revno=`svn info infodir | sed -n 's/^Revision: //p'`; 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov rm -rf infodir; 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo $revno) 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovruncmd () { 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov logfile=$1 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov str=$2 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov shift 2 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Header in short logfile. 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # We use "printf" to avoid printing a newline; "echo -n" isn't POSIX and 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # so isn't supported on all systems. 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf " $str ... " >> $logfile.short 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Header and command in verbose logfile 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov printf " $str ... " >> $logfile.verbose 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "$*" >> $logfile.verbose 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Run the command 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ("${ABT_EVAL}" "$*") >> $logfile.verbose 2>&1 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov res=$? 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Write result to the short logfile 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if [ $res = 0 ] 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov then 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "done" >> $logfile.short 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov else 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "failed" >> $logfile.short 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov fi 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return $res 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Startup 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvalgrind_svn_repo="svn://svn.valgrind.org/valgrind/trunk" 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Must have exactly two arguments 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ $# -ne 2 ] ; then 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "usage: $0 /path/to/valgrind/nightly <tag>" 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov exit 1 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Get args from command line 63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovDIR=$1 64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovTAG=$2 65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Get times and date 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovSTART=`date "+%F %H:%M:%S %Z"` 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# This is one of the formats SVN accepts. Yes, the 'T' appears in the final 70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# string, it's supposed to be like that. 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsvn_date_format="+%Y-%m-%dT%H:%M:%S" 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# The time-and-date from 24 hours ago is tricky; Linux and Darwin have 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# different ways of getting it, so we try things until something works. 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsvn_old_date= 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "z" = "z${svn_old_date}" ] ; then 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Linux method. 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov svn_old_date=`date --date=yesterday $svn_date_format 2> /dev/null` 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "z" = "z${svn_old_date}" ] ; then 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Darwin method. 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov svn_old_date=`date -v-24H $svn_date_format 2> /dev/null` 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "z" = "z${svn_old_date}" ] ; then 85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Sorry, can't work out the time and date for 24 hours ago, aborting" 86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov exit 1; 87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# The time-and-date for now is easy. 90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsvn_new_date=`date $svn_date_format` 91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcd $DIR 93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Clean up output files produced by a previous run. 95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovrm -rf diffs diffs.txt diff.short final new.short new.verbose old.short old.verbose 96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovrm -rf sendmail.log unchanged.log valgrind-old valgrind-new 97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Setup any relevant environment variables from conf/<tag>.conf. 99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov. conf/$TAG.conf 100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "${ABT_JOBS}" = "" ]; then 101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ABT_JOBS=1 102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "${ABT_EVAL}" = "" ]; then 104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ABT_EVAL="eval" 105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "${ABT_RUN_REGTEST}" = "" ]; then 107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ABT_RUN_REGTEST="make regtest" 108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Check out, build, test 113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsvn_old_rev="`get_svn_revision ${svn_old_date}`" 116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovsvn_new_rev="`get_svn_revision ${svn_new_date}`" 117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "${svn_old_rev}" = "${svn_new_rev}" ]; then 118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Both {$svn_old_date} and {$svn_new_date} correspond to r${svn_new_rev}"\ 119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "-- skipping nightly build." >unchanged.log 120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov exit 0 121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Do everything twice -- once for the 24 hours old Valgrind, and once 124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# for the current one. 125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfor logfile in old new ; do 126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Remove old short and verbose log files, and start the new ones 128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov for ext in short verbose ; do 129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo > $logfile.$ext 130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov done 131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Choose the current Valgrind, or one from 24 hours ago 133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if [ $logfile = "old" ] ; then 134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov svn_date=$svn_old_date 135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov else 136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov svn_date=$svn_new_date 137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov fi 138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Get dates for the old and new versions 140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Check out, build, run tests 142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov runcmd $logfile \ 143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "Checking out valgrind source tree" \ 144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "svn co ${valgrind_svn_repo} -r {$svn_date} valgrind-$logfile" && \ 145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov \ 146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov runcmd $logfile \ 147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "Configuring valgrind " \ 148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "cd valgrind-$logfile && ./autogen.sh && ./configure --prefix=`pwd`/valgrind-$logfile/Inst ${ABT_CONFIGURE_OPTIONS}" && \ 149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov \ 150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov runcmd $logfile \ 151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "Building valgrind " \ 152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "cd valgrind-$logfile && make -j ${ABT_JOBS} && make -j ${ABT_JOBS} check && make install" && \ 153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov \ 154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov runcmd $logfile \ 155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "Running regression tests " \ 156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "cd valgrind-$logfile && ${ABT_RUN_REGTEST}" 157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # Grab some indicative text for the short log file -- if the regtests 159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # succeeded, show their results. If we didn't make it that far, show the 160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov # last 20 lines. 161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov egrep -q '^== [0-9]+ tests' $logfile.verbose && ( 162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> $logfile.short 163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Regression test results follow" >> $logfile.short 164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> $logfile.short 165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov awk '/^== [0-9]+ tests/, /^$/ { print }' $logfile.verbose >> $logfile.short 166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ) || ( 167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> $logfile.short 168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Last 20 lines of verbose log follow" >> $logfile.short \ 169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> $logfile.short 170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov tail -20 $logfile.verbose >> $logfile.short 171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ) 172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdone 173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Prepare results and send 176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#---------------------------------------------------------------------------- 177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Get times and date 179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovEND=`date "+%F %H:%M:%S %Z"` 180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Gather some information about this run and its environment 182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvalgrind_revision="`svn info valgrind-new | grep Revision | sed 's/Revision[ ]*:[ ]*//'`" 183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvex_revision="`svn info valgrind-new/VEX | grep Revision | sed 's/Revision[ ]*:[ ]*//'`" 184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovgcc_version="`gcc --version | head -1`" 185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovlibc_so="`ls -1 /lib/libc.so.* | tail -1`" 186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovlibc="unknown" 187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ "x$libc_so" != "x" ]; then 188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if [ -e "$libc_so" -a -r "$libc_so" ]; then 189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov libc="`/lib/libc.so.* | head -1`" 190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov fi 191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovuname_stuff="`uname -mrs`" 193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ -e "/etc/issue.net" -a -r "/etc/issue.net" ]; then 194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov vendor_stuff="`cat /etc/issue.net | head -1`" 195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovelse 196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov vendor_stuff="unknown" 197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "valgrind revision: $valgrind_revision" > final 200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "VEX revision: $vex_revision" >> final 201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "GCC version: $gcc_version" >> final 202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "C library: $libc" >> final 203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "uname -mrs: $uname_stuff" >> final 204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "Vendor version: $vendor_stuff" >> final 205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# 'final' shows the difference between the old and new results 207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho >> final 208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "Nightly build on" $TAG "(" $ABT_DETAILS ")" >> final 209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "Started at" $START >> final 210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovecho "Ended at" $END >> final 211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# If the results differ from 24 hours ago, print extra stuff. 213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdiff -C1 old.short new.short > diff.short 214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovchanged=$? 215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ $changed != 0 ] ; then 217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Results differ from 24 hours ago" >> final 218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov changed_str="" 219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovelse 220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Results unchanged from 24 hours ago" >> final 221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov changed_str="(unchanged) " 222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Always show the current results. 225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovcat new.short >> final 226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ $changed != 0 ] ; then 228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> final 229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "== Results from 24 hours ago ==" >> final 230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> final 231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cat old.short >> final 232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> final 234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> final 235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "== Difference between 24 hours ago and now ==" >> final 236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> final 237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> final 238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cat diff.short >> final 239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo >> final 240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Gather up the diffs (at most the first 100 lines for each one) into a 243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# single file. 244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovMAX_LINES=100 245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovdiff_files=`find . -name '*.diff*' | sort` 246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovif [ z"$diff_files" = z ] ; then 247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "Congratulations, all tests passed!" >> diffs 248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovelse 249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov for i in $diff_files ; do 250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> diffs 251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo $i >> diffs 252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "=================================================" >> diffs 253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if [ `wc -l < $i` -le $MAX_LINES ] ; then 254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cat $i >> diffs 255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov else 256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov head -n $MAX_LINES $i >> diffs 257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov echo "<truncated beyond $MAX_LINES lines>" >> diffs 258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov fi 259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov done 260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovfi 261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Rename diffs into diffs.txt such that it can be viewed easily with an 263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# e-mail client. 264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovmv diffs diffs.txt 265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov# Use the conf/<tag>.sendmail script to email the results. 267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovconf/$TAG.sendmail \ 268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "$changed_str$START nightly build ($TAG, $ABT_DETAILS)" \ 269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov final \ 270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov diffs.txt > sendmail.log 2>&1 271