#!/bin/sh # settings are located in $HOME/.corpus echo "Using corpus-nightly settings from $HOME/.corpus at" date . $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