#! @PYTHON@ # Copyright (C) 2002-2018 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. """Move a message from the shunt queue to the original queue. Usage: %(PROGRAM)s [options] [directory] Where: -h / --help Print help and exit. Optional `directory' specifies a directory to dequeue from other than qfiles/shunt. *** Warning *** Do not unshunt messages that weren't shunted to begin with. For example, running unshunt on qfiles/out/ will result in losing all the messages in that queue. """ import sys import getopt import paths from Mailman import mm_cfg from Mailman.Queue.sbcache import get_switchboard from Mailman.i18n import C_ def usage(code, msg=''): if code: fd = sys.stderr else: fd = sys.stdout print >> fd, C_(__doc__) if msg: print >> fd, msg sys.exit(code) def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'h', ['help']) except getopt.error, msg: usage(1, msg) for opt, arg in opts: if opt in ('-h', '--help'): usage(0) if len(args) == 0: qdir = mm_cfg.SHUNTQUEUE_DIR elif len(args) == 1: qdir = args[0] else: usage(1) sb = get_switchboard(qdir) sb.recover_backup_files() for filebase in sb.files(): try: msg, msgdata = sb.dequeue(filebase) whichq = msgdata.get('whichq', mm_cfg.INQUEUE_DIR) tosb = get_switchboard(whichq) tosb.enqueue(msg, msgdata) except Exception, e: # If there are any unshunting errors, log them and continue trying # other shunted messages. print >> sys.stderr, C_( 'Cannot unshunt message %(filebase)s, skipping:\n%(e)s') else: # Unlink the .bak file left by dequeue() sb.finish(filebase) if __name__ == '__main__': main()