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