X-Git-Url: https://git.donarmstrong.com/?p=spamassassin_config.git;a=blobdiff_plain;f=update_spamassassin;h=c5d9629ea1e61529bfef9c1ef3c0d7baea556fad;hp=00c540f48d05306f3b822b387d545415187c9c62;hb=b387f2f7e58aa81fbf565bc4f70d27a72996eea0;hpb=05eda589302202d16da09d6ec493c8d09cfbd2aa diff --git a/update_spamassassin b/update_spamassassin index 00c540f..c5d9629 100755 --- a/update_spamassassin +++ b/update_spamassassin @@ -5,89 +5,94 @@ set -e -SVN=$(which svn) - TMPDIR=$(mktemp -d); -if [ "$HOSTNAME" == "rietz" ]; then +HOSTNAME=$(hostname); + +if [ "$HOSTNAME" = "buxtehude" ]; then BASEDIR="/org/bugs.debian.org" USERCONF="bugs/user_prefs"; -elif [ "$HOSTNAME" == "murphy" ]; then +elif [ "$HOSTNAME" = "bendel" ]; then BASEDIR="/var/list/.etc"; - USERCONF="bugs/user_prefs"; + USERCONF="lists/user_prefs"; else echo "Unknown hostname '$HOSTNAME'"; exit 1; fi; SACONFIG="$BASEDIR/spamassassin_config"; -BAKDIR="$BASEDIR/spamassassin_config_bak"; - -# 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 [ $ORIGREV -ge $NEWREV ]; then - exit 0; -fi; -if [ -e "$SACONFIG/.update_spamassassin" ] && kill -0 $(cat "$SACONFIG/.update_spamassassin"); then +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; -function remove_pidfile(){ - rm "$SACONFIG/.update_spamassassin"; +remove_pidfile() { + rm -f "$SACONFIG/.update_spamassassin" } -trap remove_pidfile ERR; +OLDDIR="$(pwd)"; +cd "$SACONFIG"; +git fetch --all >/dev/null || exit 0; +REMOTE_BRANCH="$(git status --porcelain --branch|grep '^##'|sed 's/.*\.\.\.//;s/ \[.*$//;')"; +CURRENT_HEAD="$(git rev-parse HEAD)" +REMOTE_BRANCH_HEAD="$(git rev-parse "$REMOTE_BRANCH")" +cd "$OLDDIR"; +## there aren't any updates, stop here. +if [ "$REMOTE_BRANCH_HEAD" = "$CURRENT_HEAD" ]; then + remove_pidfile; + exit 0; +fi; +trap remove_pidfile 0; FAILUREMESSAGE=""; -function report_failure(){ +report_failure () { # Hrm; a previous update failed; don't report again until the file - # is removed - if [ -e "$SACONFIG/failed_update" ]; then - exit 0; + # 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"; + remove_pidfile; + exit 0; fi; - echo "$FAILUREMESSAGE" >> "$SACONFIG/failed_update" + echo "$FAILUREMESSAGE" > "$SACONFIG/failed_update" echo "$FAILUREMESSAGE"; cat - </dev/null 2>&1 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 ERR +cd "$SACONFIG"; +git merge --ff-only --quiet $REMOTE_BRANCH --; +trap - 0 remove_pidfile rm -rf "$TMPDIR" -if [ "$HOSTNAME" == "rietz" ]; then +if [ "$HOSTNAME" = "buxtehude" ]; then touch /home/debbugs/.spamassassin/user_prefs -elif [ "$HOSTNAME" == "murphy" ]; then +elif [ "$HOSTNAME" = "bendel" ]; then # do nothing true; else