We have come up a few times where a list was created incorrectly.
Normally, we catch the mistake, delete the list, and recreate it
properly. However, there are times when the mistake is caught after
having been in use. So, the delete and recreate is not available to use.
I have a copy of Mark's clone_list command and it will allow us to
rename lists. Which is great and not a problem for me. However, I am
not the person normally involved with list creation, etc. Another group
does it. Normally through the web interface which works well for them.
Unless a mistake is made then they have to use the command line tools.
Again, not a problem for me but that group has very limited knowledge of
linux/unix and Mailman.
I can easily train them to use the Mailman tools, however, ensuring they
do the appropriate checks to avoid other problems is more difficult.
Specifically, they can run the clone_list command but rebuilding the
archives requires checking if the scrub_nondigest settings is No (this
is explained in the clone_list help).
What I have done is modify the clone_list command to combine the
renaming/cloning of a list and include an option to rebuild the
archives. However, the archives will not be rebuilt if the
scrub_nondigest setting is Yes.
Below my message is a diff of my changes to clone_list. While I try
testing my changes on a test system, I would appreciate it if someone
could take a look at my changes to ensure I am not off-base with my process.
--------------- My diff of clone_list -----------
--- clone_list 2016-03-18 10:28:14.000000000 -0700
+++ clone_list_scu 2016-03-22 10:19:43.000000000 -0700
@@ -109,6 +109,10 @@
Clone the archives of the old list. The default is an empty archive.""")
+ parser.add_argument('-b', '--rebuild_archives',
+ dest='rebuild_archives', action='store_true',
+Rebuild the archives of the new list. Requires -a/--archives.""")
@@ -186,6 +190,8 @@
abort("%s doesn't appear to be a valid email address" %
if ns.extra and not ns.clone_members:
abort('-e/--extra_files requires -m/--members.')
+ if ns.rebuild_archives and not ns.archives:
+ abort('-b/--rebuild_archives requires -a/--archives.')
print 'Getting %s list...' % ns.old_list
ol = MailList(old_list, lock=False)
@@ -268,5 +274,29 @@
+ if ns.rebuild_archives:
+ if ns.verbose:
+ print 'Rebuilding %s archives...' % ns.new_list
+ if ol.scrub_nondigest:
+ abort('Scrub_nondigest is YES for %s. WILL NOT REBUILD
ARCHIVES.' % ns.old_list)
+ archcmd = os.path.join(os.path.dirname(sys.argv), 'arch')
+ if not os.path.isfile(archcmd):
+ abort("""%s doesn't exist.
+Am I installed in Mailman's bin/ directory?""" % archcmd)
+ rbld = subprocess.Popen([archcmd,
+ so, se = rbld.communicate()
+ if rbld.returncode:
+ abort('unable to rebuild archives for %s\n%s' %
+ # If there was stdout output, print it. It is probably aliases.
+ if so:
+ print so
if __name__ == '__main__':