]> Sergey Matveev's repositories - public-inbox.git/blobdiff - scripts/edit-sa-prefs
spamassassin rule and config updates
[public-inbox.git] / scripts / edit-sa-prefs
diff --git a/scripts/edit-sa-prefs b/scripts/edit-sa-prefs
new file mode 100755 (executable)
index 0000000..acaed61
--- /dev/null
@@ -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'