#!/bin/sh
#
# second (post-SVN-update) part of corpus-nightly.  This is a separate
# script so that, if SVN updates it, changes will take effect in this
# mass-check

. /etc/profile
. $HOME/.corpus

RSYNC_PASSWORD=$password ; export RSYNC_PASSWORD

# use $PERL from env if unset
[ "x${PERL:-}" = x ] && PERL=perl
export PERL

set -x
set -e

# day of week
net=""
if date | egrep '^Sat' || [ "$1" = "net" ]; then net="net-" ; fi

# enter tree
cd $tree || exit 5

[ -d $tmp ] || mkdir -p $tmp

# build
$PERL Makefile.PL < /dev/null
make > $tmp/build.log

# call ext command, if required
if [ "x${pre_mass_check_command:-}" != x ] ; then
  $pre_mass_check_command
fi

# run test
cd masses
rm -f spamassassin/auto*
rm -f spamassassin/bayes*
rm -f razor-agent.log
[ -d spamassassin ] || mkdir spamassassin

if [ -n "$net" ]; then
	prefs=$prefs_weekly
	opts="$opts_weekly ${opts:-}"
else
	prefs=$prefs_nightly
	opts="$opts_nightly ${opts:-}"
fi
if [ -n "$prefs" -a -f "$prefs" ]; then
	cp $prefs spamassassin/user_prefs
else
	rm -f spamassassin/user_prefs
fi

date | tee test.start

if [ "${clienthosts:-}" = "" ] ; then

  # local mass-check
  $PERL mass-check $opts

else

  # client-server mode

  # copy the certs from their storage dir; this is not checked
  # in, since that would allow third-party hosts to connect to
  # the master server and "steal" scanned mails
  cp /local/bbmasstools/mass-check-certs/*.pem spamassassin/

  $PERL mass-check --noisy --progress --cs_ssl --server $serverhost \
    --run_post_scan="./rule-qa/nightly-slaves-start $clienthosts" \
    $opts

  # the slaves will be started if the "run" stage is started, and
  # will exit when the server mass-check does (they "phone home"
  # to the specified server host/port and exit if that disappears
  # for a long time)

  # just to be sure, though: run a 'stop' script in case that fails
  ./rule-qa/nightly-slaves-stop $clienthosts || true
fi

date | tee test.end

uptime
ls -l spam.log ham.log

# results name
mv spam.log spam-$net$username.log
mv ham.log ham-$net$username.log

# rsync
set +e
retry=0
while true; do
	if rsync -Pcvuzb --timeout=120 \
            spam-$net$username.log ham-$net$username.log \
            $username@rsync.spamassassin.org::corpus/
        then
		break;
	fi
	if [ $retry -eq 120 ]; then
		echo "rsync failed" 1>&2
		exit 1
	fi
	retry=$(( $retry + 1 ))
	sleep 30
done
set -e

exit 0
