From: Alex Chiang <achiang@hp.com>
To: catalin.marinas@gmail.com
Cc: git <git@vger.kernel.org>, Karl Wiberg <kha@treskal.com>
Subject: [StGit PATCH v2 3/6] stg mail: make __send_message do more
Date: Tue, 1 Dec 2009 17:46:16 -0700 [thread overview]
Message-ID: <20091202004616.7737.60382.stgit@bob.kio> (raw)
In-Reply-To: <20091202003503.7737.51579.stgit@bob.kio>
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@treskal.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
---
stgit/commands/mail.py | 65 +++++++++++++++++++++---------------------------
1 files changed, 29 insertions(+), 36 deletions(-)
diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py
index 35194a8..edff878 100644
--- a/stgit/commands/mail.py
+++ b/stgit/commands/mail.py
@@ -228,17 +228,39 @@ 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(type, tmpl, options, *args):
"""Message sending dispatcher.
"""
- smtpserver = options.smtp_server or config.get('stgit.smtpserver')
+ (build, outstr) = {'cover': (__build_cover, 'the cover message'),
+ 'patch': (__build_message, 'patch "%s"' % args[0])}[type]
+ if type == 'patch':
+ (patch_nr, total_nr) = (args[1], args[2])
+
+ msg_id = email.Utils.make_msgid('stgit')
+ msg = build(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
+
+ out.start('Sending ' + outstr)
+ 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
+ if type == 'cover' or (type == 'patch' and patch_nr < total_nr):
+ 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 +606,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 +620,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('cover', 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()
@@ -628,25 +637,9 @@ def func(parser, options, args):
if not tmpl:
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)
+ for (p, n) in zip(patches, range(1, total_nr + 1)):
+ msg_id = __send_message('patch', tmpl, options, p, n, 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()
next prev parent reply other threads:[~2009-12-02 0:46 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-02 0:46 [StGit PATCH v2 0/6] add support for git send-email Alex Chiang
2009-12-02 0:46 ` [StGit PATCH v2 1/6] stg mail: Refactor __send_message and friends Alex Chiang
2009-12-02 6:53 ` Karl Wiberg
2009-12-03 19:27 ` Alex Chiang
2009-12-03 20:46 ` [StGit PATCH v3 " Alex Chiang
2009-12-02 0:46 ` [StGit PATCH v2 2/6] stg mail: reorder __build_[message|cover] parameters Alex Chiang
2009-12-02 0:46 ` Alex Chiang [this message]
2009-12-02 7:03 ` [StGit PATCH v2 3/6] stg mail: make __send_message do more Karl Wiberg
2009-12-03 19:30 ` Alex Chiang
2009-12-04 7:00 ` Karl Wiberg
2009-12-02 0:46 ` [StGit PATCH v2 4/6] stg mail: factor out __update_header Alex Chiang
2009-12-02 0:46 ` [StGit PATCH v2 5/6] stg mail: add basic support for git send-email Alex Chiang
2009-12-02 0:46 ` [StGit PATCH v2 6/6] stg mail: don't parse To/Cc/Bcc in --git mode Alex Chiang
2009-12-02 6:46 ` [StGit PATCH v2 0/6] add support for git send-email Karl Wiberg
2009-12-03 19:27 ` Alex Chiang
2009-12-02 7:08 ` Karl Wiberg
2009-12-02 22:35 ` Catalin Marinas
2009-12-06 22:16 ` Catalin Marinas
2009-12-07 7:09 ` Karl Wiberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091202004616.7737.60382.stgit@bob.kio \
--to=achiang@hp.com \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.org \
--cc=kha@treskal.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.