blob: 99de833becad869b1ac5f217b608e7234c07d0a5 [file] [log] [blame]
#!/bin/sh
# settings are located in $HOME/.corpus
echo "Using corpus-nightly settings from $HOME/.corpus at"
date
. /etc/profile
. $HOME/.corpus
# use $PERL from env if unset
[ "x${PERL:-}" = x ] && PERL=perl
export PERL
set -x
renice -n +10 -p $$
set -e # after renice, which typically fails
# ensure we're running after 0900 UTC; complex due to daylight savings.
# If we're running in the 08xx UTC hour-space, sleep for 1 hour; when
# we wake, we will be in 09xx.
(
TIME="%e,%U,%S"; TZ=UTC; export TIME TZ
if date | egrep '^... ... .. 08:'; then
date; echo "sleeping for 1 hour to compensate for DST"
sleep 3600 ; date
fi
)
# day of week
net=""
if date | egrep '^Sat' || [ "$1" = "net" ]; then net="net-" ; fi
# enter tree
if [ -d $tree ] ; then
cd $tree
else
echo "$tree does not exist yet. you need to check it out first" 1>&2
exit 2
fi
# find current revision
rm -f weekly-versions.txt nightly-versions.txt
if ! wget --tries=120 --wait=30 \
http://rsync.spamassassin.org/weekly-versions.txt \
http://rsync.spamassassin.org/nightly-versions.txt
then
echo "wget failed" 1>&2
exit 0
fi
if [ -n "$net" ]; then
revision=$(tail -1 weekly-versions.txt|awk '{print $2}')
else
revision=$(tail -1 nightly-versions.txt|awk '{print $2}')
fi
# update
# TODO: replace all this with rsync, it's much safer ;)
set +e
retry=0
while true; do
rm -rf rules # causing trouble for some reason
rm -rf rulesrc/sandbox
if svn update -r $revision < /dev/null && \
svn update -r $revision rulesrc < /dev/null
then
break;
fi
# if that failed, get aggressive about getting a full
# checkout, regardless of what may have been here already;
# delete most of the checkout to do so, and just use "svn co"
# instead of "svn up".
svnpath=`svn info .| grep -i ^URL: | cut -d ' ' -f 2`
rm -rf rules lib build rulesrc spamd spamc
svn cleanup < /dev/null
svn co --non-interactive $svnpath .
# just 10 times; our SVN repo shouldn't be *that* unreliable!
if [ $retry -eq 20 ]; then
echo "svn update/co failed" 1>&2
exit 1
fi
retry=$(( $retry + 1 ))
# longer and longer between retries
sleep `expr 20 '*' $retry`
done
set -e
# once we have everything checked out, run "part 2"
exec bash $tree/masses/rule-qa/corpus-nightly.post-svn