| #!/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 |
| |