aboutsummaryrefslogtreecommitdiffstats
path: root/bin/rmlist
diff options
context:
space:
mode:
Diffstat (limited to 'bin/rmlist')
-rwxr-xr-xbin/rmlist138
1 files changed, 138 insertions, 0 deletions
diff --git a/bin/rmlist b/bin/rmlist
new file mode 100755
index 00000000..6ff0b5c1
--- /dev/null
+++ b/bin/rmlist
@@ -0,0 +1,138 @@
+#! @PYTHON@
+#
+# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+"""Remove the components of a mailing list with impunity - beware!
+
+This removes (almost) all traces of a mailing list. By default, the lists
+archives are not removed, which is very handy for retiring old lists.
+
+Usage:
+ rmlist [-a] [-h] listname
+
+Where:
+ --archives
+ -a
+ Remove the list's archives too, or if the list has already been
+ deleted, remove any residual archives.
+
+ --help
+ -h
+ Print this help message and exit.
+
+"""
+
+import os
+import sys
+import getopt
+import shutil
+
+import paths
+from Mailman import mm_cfg
+from Mailman import Utils
+from Mailman import MailList
+from Mailman.i18n import _
+
+
+
+def usage(code, msg=''):
+ if code:
+ fd = sys.stderr
+ else:
+ fd = sys.stdout
+ print >> fd, _(__doc__)
+ if msg:
+ print >> fd, msg
+ sys.exit(code)
+
+
+
+def remove_it(listname, dir, msg):
+ if os.path.islink(dir):
+ print _('Removing %(msg)s')
+ os.unlink(dir)
+ elif os.path.isdir(dir):
+ print _('Removing %(msg)s')
+ shutil.rmtree(dir)
+ else:
+ print _('%(listname)s %(msg)s not found as %(dir)s')
+
+
+
+def main():
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'ah',
+ ['archives', 'help'])
+ except getopt.error, msg:
+ usage(1, msg)
+
+ if len(args) <> 1:
+ usage(1)
+ listname = args[0].lower().strip()
+
+ removeArchives = 0
+ for opt, arg in opts:
+ if opt in ('-a', '--archives'):
+ removeArchives = 1
+ elif opt in ('-h', '--help'):
+ usage(0)
+
+ if not Utils.list_exists(listname):
+ if not removeArchives:
+ usage(1, _('No such list (or list already deleted): %(listname)s'))
+ else:
+ print _(
+ 'No such list: %(listname)s. Removing its residual archives.')
+
+ if not removeArchives:
+ print _('Not removing archives. Reinvoke with -a to remove them.')
+
+
+ REMOVABLES = []
+ if Utils.list_exists(listname):
+ mlist = MailList.MailList(listname, lock=0)
+
+ # Do the MTA-specific list deletion tasks
+ if mm_cfg.MTA:
+ modname = 'Mailman.MTA.' + mm_cfg.MTA
+ __import__(modname)
+ sys.modules[modname].remove(mlist)
+
+ REMOVABLES = [
+ (os.path.join('lists', listname), _('list info')),
+ ]
+
+ if removeArchives:
+ REMOVABLES.extend([
+ (os.path.join('archives', 'private', listname),
+ _('private archives')),
+ (os.path.join('archives', 'private', listname + '.mbox'),
+ _('private archives')),
+ (os.path.join('archives', 'public', listname),
+ _('public archives')),
+ (os.path.join('archives', 'public', listname + '.mbox'),
+ _('public archives')),
+ ])
+
+ for dirtmpl, msg in REMOVABLES:
+ dir = os.path.join(mm_cfg.VAR_PREFIX, dirtmpl)
+ remove_it(listname, dir, msg)
+
+
+
+if __name__ == '__main__':
+ main()