| #!/bin/sh |
| # Copyright (C) 2014, Eric Wong <e@80x24.org> |
| # License: GPLv3 or later <http://www.gnu.org/licenses/gpl-3.0.txt> |
| # edit and atomically update ~/.spamasassin/user_prefs safely |
| set -e |
| cd ~/.spamassassin |
| cp user_prefs user_prefs.edit.$$ # don't care if we clobber old files |
| |
| # non-blocking lock |
| if ! ln user_prefs.edit.$$ user_prefs.edit |
| then |
| rm user_prefs.edit.$$ |
| echo >&2 "we are already editing user_prefs.edit" |
| exit 1 |
| fi |
| |
| rm user_prefs.edit.$$ |
| |
| ${VISUAL-vi} user_prefs.edit |
| |
| if diff -u user_prefs user_prefs.edit |
| then |
| rm -f user_prefs.edit |
| echo 'no changes' |
| exit 0 |
| fi |
| |
| # check until we're good or $EDITOR fails |
| while ! spamassassin -p user_prefs.edit --lint |
| do |
| echo >&2 "respawning editor, press Enter to continue" |
| read ignored_var |
| ${VISUAL-vi} user_prefs.edit |
| done |
| |
| # atomically replace user_prefs |
| mv user_prefs.edit user_prefs |
| echo '~/.spamassassin/user_prefs updated' |