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