Factor out the common code required to send either a cover mail or patch, and implement it in __send_message. WRY? DRY. Cc: Karl Wiberg <kha@xxxxxxxxxxx> Signed-off-by: Alex Chiang <achiang@xxxxxx> --- stgit/commands/mail.py | 61 ++++++++++++++++++++---------------------------- 1 files changed, 26 insertions(+), 35 deletions(-) diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py index b6fc3d9..fe5742e 100644 --- a/stgit/commands/mail.py +++ b/stgit/commands/mail.py @@ -228,17 +228,37 @@ def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, options): s.quit() -def __send_message(from_addr, to_addr_list, msg, options): +def __send_message(tmpl, options, *args): """Message sending dispatcher. """ - smtpserver = options.smtp_server or config.get('stgit.smtpserver') + msg_id = email.Utils.make_msgid('stgit') + build = { 1: __build_cover, 4: __build_message } + msg = build[len(args)](tmpl, msg_id, options, *args) + + from_addr, to_addrs = __parse_addresses(msg) + msg_str = msg.as_string(options.mbox) + if options.mbox: + out.stdout_raw(msg_str + '\n') + return msg_id + + outstr = { 1: 'the cover message', 4: 'patch "%s"' % args[0] } + out.start('Sending ' + outstr[len(args)]) + smtpserver = options.smtp_server or config.get('stgit.smtpserver') if smtpserver.startswith('/'): # Use the sendmail tool - __send_message_sendmail(smtpserver, msg) + __send_message_sendmail(smtpserver, msg_str) else: # Use the SMTP server (we have host and port information) - __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, options) + __send_message_smtp(smtpserver, from_addr, to_addrs, msg_str, options) + + # give recipients a chance of receiving related patches in correct order + # patch_nr < total_nr + if len(args) == 1 or (len(args) == 4 and args[1] < args[2]): + sleep = options.sleep or config.getint('stgit.smtpdelay') + time.sleep(sleep) + out.done() + return msg_id def __build_address_headers(msg, options, extra_cc = []): """Build the address headers and check existing headers in the @@ -584,7 +604,6 @@ def func(parser, options, args): else: ref_id = None - sleep = options.sleep or config.getint('stgit.smtpdelay') # send the cover message (if any) if options.cover or options.edit_cover: @@ -599,24 +618,12 @@ def func(parser, options, args): if not tmpl: raise CmdException, 'No cover message template file found' - msg_id = email.Utils.make_msgid('stgit') - msg = __build_cover(tmpl, msg_id, options, patches) - from_addr, to_addr_list = __parse_addresses(msg) - - msg_string = msg.as_string(options.mbox) + msg_id = __send_message(tmpl, options, patches) # subsequent e-mails are seen as replies to the first one if not options.noreply: ref_id = msg_id - if options.mbox: - out.stdout_raw(msg_string + '\n') - else: - out.start('Sending the cover message') - __send_message(from_addr, to_addr_list, msg_string, options) - time.sleep(sleep) - out.done() - # send the patches if options.template: tmpl = file(options.template).read() @@ -629,24 +636,8 @@ def func(parser, options, args): raise CmdException, 'No e-mail template file found' for (p, patch_nr) in zip(patches, range(1, total_nr + 1)): - msg_id = email.Utils.make_msgid('stgit') - msg = __build_message(tmpl, msg_id, options, p, patch_nr, total_nr, - ref_id) - from_addr, to_addr_list = __parse_addresses(msg) - - msg_string = msg.as_string(options.mbox) + msg_id = __send_message(tmpl, options, p, patch_nr, total_nr, ref_id) # subsequent e-mails are seen as replies to the first one if not options.noreply and not options.unrelated and not ref_id: ref_id = msg_id - - if options.mbox: - out.stdout_raw(msg_string + '\n') - else: - out.start('Sending patch "%s"' % p) - __send_message(from_addr, to_addr_list, msg_string, options) - # give recipients a chance of receiving related patches in the - # correct order. - if patch_nr < total_nr: - time.sleep(sleep) - out.done() -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html