123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/bin/sh
- # This command updates the spamassassin configuration; tests the new
- # configuration; then moves the updated configuration in place
- set -e
- SVN=$(which svn)
- TMPDIR=$(mktemp -d);
- HOSTNAME=$(hostname);
- if [ "$HOSTNAME" = "buxtehude" ]; then
- BASEDIR="/org/bugs.debian.org"
- USERCONF="bugs/user_prefs";
- elif [ "$HOSTNAME" = "bendel" ]; then
- BASEDIR="/var/list/.etc";
- USERCONF="lists/user_prefs";
- else
- echo "Unknown hostname '$HOSTNAME'";
- exit 1;
- fi;
- SACONFIG="$BASEDIR/spamassassin_config";
- BAKDIR="$BASEDIR/spamassassin_config_bak";
- # because alioth continuously fails, make sure that svn info will
- # succeed first before cluttering the log. Ideally we would report
- # this error, but it happens far too frequently, so we bail out here.
- if ! svn info $(svn info $SACONFIG|awk '/^URL:/{print $2}') >/dev/null 2>&1; then
- exit 0;
- fi;
- # figure out if there's an update to be made
- ORIGREV=$(svn info $SACONFIG |awk '/^Revision:/{print $2}')
- NEWREV=$(svn info $(svn info $SACONFIG|awk '/^URL:/{print $2}')|awk '/^Revision:/{print $2}')
- # no changes, bug out.
- if [ "0$ORIGREV" -ge "0$NEWREV" ]; then
- exit 0;
- fi;
- if [ -e "$SACONFIG/.update_spamassassin" ] && kill -0 $(cat "$SACONFIG/.update_spamassassin") >/dev/null 2>&1; then
- echo "Another update_spamassassin appears to be running"
- exit 1;
- else
- echo $$ > "$SACONFIG/.update_spamassassin";
- fi;
- remove_pidfile () {
- rm "$SACONFIG/.update_spamassassin";
- }
- trap remove_pidfile 0;
- FAILUREMESSAGE="";
- report_failure () {
- # Hrm; a previous update failed; don't report again until the file
- # is removed or it's more than a day old
- if [ -e "$SACONFIG/failed_update" ] &&
- [ $(($(date +%s) - $(stat -c '%Y' "$SACONFIG/failed_update"))) -lt 86400 ]; then
- rm -rf "$TMPDIR"
- exit 0;
- fi;
- echo "$FAILUREMESSAGE" > "$SACONFIG/failed_update"
- echo "$FAILUREMESSAGE";
- cat - <<EOF;
- update_spamassassin will only report this error once a day, and
- updates will not occur until this is fixed.
- Please fix the problem and then remove
- $SACONFIG/failed_update
- EOF
- rm -rf "$TMPDIR"
- exit 1;
- }
- cp -ar $SACONFIG $TMPDIR/.
- OLDDIR="$(pwd)"
- cd $TMPDIR/spamassassin_config;
- svn update -q --non-interactive;
- if svn status |grep -q '^C'; then
- FAILUREMESSAGE=$'The following conflicts were found\n\n'
- FAILUREMESSAGE="$FAILUREMESSAGE$(svn status|grep ^C)";
- report_failure
- fi;
- cd "$(pwd)"
- if ! spamassassin -p $TMPDIR/spamassassin_config/$USERCONF --lint > $TMPDIR/sa_lint 2>&1; then
- FAILUREMESSAGE="$(echo -e 'spamassassin -p $TMPDIR/spamassassin_config/$USERCONF --lint\nfailed with\n'| cat - $TMPDIR/sa_lint)";
- report_failure
- fi;
- mv "$SACONFIG" "$BAKDIR/spamassassin_config_r$ORIGREV"
- mv "$TMPDIR/spamassassin_config" "$SACONFIG"
- trap - 0
- remove_pidfile
- rm -rf "$TMPDIR"
- if [ "$HOSTNAME" = "buxtehude" ]; then
- touch /home/debbugs/.spamassassin/user_prefs
- elif [ "$HOSTNAME" = "bendel" ]; then
- # do nothing
- true;
- else
- echo "Unknown hostname '$HOSTNAME'";
- exit 1;
- fi;
- exit 0;
|