diff options
Diffstat (limited to 'scripts/edit-sa-prefs')
-rwxr-xr-x | scripts/edit-sa-prefs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/scripts/edit-sa-prefs b/scripts/edit-sa-prefs new file mode 100755 index 00000000..acaed610 --- /dev/null +++ b/scripts/edit-sa-prefs @@ -0,0 +1,38 @@ +#!/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' |