diff options
| author | Barry Warsaw | 2008-03-22 22:01:31 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2008-03-22 22:01:31 -0400 |
| commit | 1152d9a475f29c49bf342782b2037bb2a28def9b (patch) | |
| tree | 80dfebebb912a4993ead5af6bb22d5ad0197f301 | |
| parent | 78aeaf14e41c473655267d8a0fad175c783012e7 (diff) | |
| download | mailman-1152d9a475f29c49bf342782b2037bb2a28def9b.tar.gz mailman-1152d9a475f29c49bf342782b2037bb2a28def9b.tar.zst mailman-1152d9a475f29c49bf342782b2037bb2a28def9b.zip | |
Rename rmlist to remove_list, and let it take multiple -l command line
arguments.
Added a MultipleMailingListOptions subclass.
Diffstat (limited to '')
| -rw-r--r-- | mailman/app/lifecycle.py | 2 | ||||
| -rw-r--r-- | mailman/bin/__init__.py | 2 | ||||
| -rw-r--r-- | mailman/bin/create_list.py | 2 | ||||
| -rw-r--r-- | mailman/bin/remove_list.py | 87 | ||||
| -rw-r--r-- | mailman/bin/rmlist.py | 82 | ||||
| -rw-r--r-- | mailman/options.py | 12 |
6 files changed, 102 insertions, 85 deletions
diff --git a/mailman/app/lifecycle.py b/mailman/app/lifecycle.py index 7d8dbb3cf..396e8da39 100644 --- a/mailman/app/lifecycle.py +++ b/mailman/app/lifecycle.py @@ -114,4 +114,4 @@ def remove_list(fqdn_listname, mailing_list=None, archives=True): elif os.path.isfile(target): os.unlink(target) else: - log.error('Could not delete list artifact: $target') + log.error('Could not delete list artifact: %s', target) diff --git a/mailman/bin/__init__.py b/mailman/bin/__init__.py index 7c6b0b482..b147bff93 100644 --- a/mailman/bin/__init__.py +++ b/mailman/bin/__init__.py @@ -48,8 +48,8 @@ __all__ = [ 'owner', 'post', 'qrunner', + 'remove_list', 'request', - 'rmlist', 'senddigests', 'set_members', 'show_config', diff --git a/mailman/bin/create_list.py b/mailman/bin/create_list.py index 8cec2755c..d6888c750 100644 --- a/mailman/bin/create_list.py +++ b/mailman/bin/create_list.py @@ -35,7 +35,7 @@ _ = i18n._ class ScriptOptions(SingleMailingListOptions): usage=_("""\ -%prog [options] fqdn_listname +%prog [options] Create a new mailing list. diff --git a/mailman/bin/remove_list.py b/mailman/bin/remove_list.py new file mode 100644 index 000000000..55da0c49a --- /dev/null +++ b/mailman/bin/remove_list.py @@ -0,0 +1,87 @@ +# Copyright (C) 1998-2008 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. + +import os +import sys +import shutil + +from mailman import Errors +from mailman import Utils +from mailman.app.lifecycle import remove_list +from mailman.configuration import config +from mailman.i18n import _ +from mailman.options import MultipleMailingListOptions + + + +class ScriptOptions(MultipleMailingListOptions): + usage=_("""\ +%prog [options] + +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. +""") + + def add_options(self): + super(ScriptOptions, self).add_options() + self.parser.add_option( + '-a', '--archives', + default=False, action='store_true', + help=_("""\ +Remove the list's archives too, or if the list has already been deleted, +remove any residual archives.""")) + self.parser.add_option( + '-q', '--quiet', + default=False, action='store_true', + help=_('Suppress status messages')) + + def sanity_check(self): + if len(self.options.listnames) == 0: + self.parser.error(_('Nothing to do')) + if len(self.arguments) > 0: + self.parser.error(_('Unexpected arguments')) + + + +def main(): + options = ScriptOptions() + options.initialize() + + for fqdn_listname in options.options.listnames: + if not options.options.quiet: + print _('Removing list: $fqdn_listname') + mlist = config.db.list_manager.get(fqdn_listname) + if mlist is None: + if options.options.archives: + print _("""\ +No such list: ${fqdn_listname}. Removing its residual archives.""") + else: + print >> sys.stderr, _( + 'No such list (or list already deleted): $fqdn_listname') + + if not options.options.archives: + print _('Not removing archives. Reinvoke with -a to remove them.') + + remove_list(fqdn_listname, mlist, options.options.archives) + config.db.commit() + + + +if __name__ == '__main__': + main() diff --git a/mailman/bin/rmlist.py b/mailman/bin/rmlist.py deleted file mode 100644 index 984c2f85d..000000000 --- a/mailman/bin/rmlist.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (C) 1998-2008 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -# USA. - -import os -import sys -import shutil -import optparse - -from mailman import Errors -from mailman import Utils -from mailman import Version -from mailman.app.lifecycle import remove_list -from mailman.configuration import config -from mailman.i18n import _ -from mailman.initialize import initialize - - - -def parseargs(): - parser = optparse.OptionParser(version=Version.MAILMAN_VERSION, - usage=_("""\ -%prog [options] listname - -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. -""")) - parser.add_option('-a', '--archives', - default=False, action='store_true', help=_("""\ -Remove the list's archives too, or if the list has already been deleted, -remove any residual archives.""")) - parser.add_option('-C', '--config', - help=_('Alternative configuration file to use')) - opts, args = parser.parse_args() - if not args: - parser.error(_('Missing listname')) - if len(args) > 1: - parser.error(_('Unexpected arguments')) - return parser, opts, args - - - -def main(): - parser, opts, args = parseargs() - initialize(opts.config) - - fqdn_listname = args[0].lower() - mlist = config.db.list_manager.get(fqdn_listname) - if mlist is None: - if not opts.archives: - print >> sys.stderr, _( - 'No such list (or list already deleted): $fqdn_listname') - sys.exit(1) - else: - print _("""\ -No such list: ${fqdn_listname}. Removing its residual archives.""") - - if not opts.archives: - print _('Not removing archives. Reinvoke with -a to remove them.') - - remove_list(fqdn_listname, mlist, opts.archives) - config.db.flush() - - - -if __name__ == '__main__': - main() diff --git a/mailman/options.py b/mailman/options.py index ee310f3b9..11a173464 100644 --- a/mailman/options.py +++ b/mailman/options.py @@ -111,3 +111,15 @@ class SingleMailingListOptions(Options): '-l', '--listname', type='unicode', help=_('The mailing list name')) super(SingleMailingListOptions, self).add_options() + + +class MultipleMailingListOptions(Options): + """A helper for specifying multiple mailing lists on the command line.""" + + def add_options(self): + self.parser.add_option( + '-l', '--listname', + default=[], action='append', dest='listnames', type='unicode', + help=("""\ +A mailing list name. It is okay to have multiple --listname options.""")) + |
