about summary refs log tree commit homepage
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/edit-sa-prefs38
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'