changeset 1702:e291d9a30bef

add --mbox output to patchbomb add option to save generated mails in an mbox file for later processing with formail, instead of sending them directly
author Johannes Stezenbach <js@linuxtv.org>
date Mon, 06 Feb 2006 17:34:39 -0600
parents 4ba8fe499df2
children 41d884f741ca
files hgext/patchbomb.py
diffstat 1 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/patchbomb.py	Mon Feb 06 17:32:10 2006 -0600
+++ b/hgext/patchbomb.py	Mon Feb 06 17:34:39 2006 -0600
@@ -27,6 +27,10 @@
 # firing it up "for real", in which case it will use your pager to
 # display each of the messages that it would send.
 #
+# The "-m" (mbox) option will create an mbox file instead of sending
+# the messages directly. This can be reviewed e.g. with "mutt -R -f mbox",
+# and finally sent with "formail -s sendmail -bm -t < mbox".
+#
 # To configure a default mail host, add a section like this to your
 # hgrc file:
 #
@@ -47,6 +51,7 @@
 
 from email.MIMEMultipart import MIMEMultipart
 from email.MIMEText import MIMEText
+from email.Utils import parseaddr
 from mercurial import commands
 from mercurial import hg
 from mercurial import ui
@@ -222,7 +227,7 @@
 
     msgs.insert(0, msg)
 
-    if not opts['test']:
+    if not opts['test'] and not opts['mbox']:
         s = smtplib.SMTP()
         s.connect(host = ui.config('smtp', 'host', 'mail'),
                   port = int(ui.config('smtp', 'port', 25)))
@@ -236,6 +241,7 @@
             s.login(username, password)
     parent = None
     tz = time.strftime('%z')
+    sender_addr = parseaddr(sender)[1]
     for m in msgs:
         try:
             m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
@@ -250,15 +256,24 @@
         m['From'] = sender
         m['To'] = ', '.join(to)
         if cc: m['Cc'] = ', '.join(cc)
-        ui.status('Sending ', m['Subject'], ' ...\n')
         if opts['test']:
+            ui.status('Displaying ', m['Subject'], ' ...\n')
             fp = os.popen(os.getenv('PAGER', 'more'), 'w')
             fp.write(m.as_string(0))
             fp.write('\n')
             fp.close()
+        elif opts['mbox']:
+            ui.status('Writing ', m['Subject'], ' ...\n')
+            fp = open(opts['mbox'], m.has_key('In-Reply-To') and 'ab+' or 'wb+')
+            date = time.asctime(time.localtime(start_time))
+            fp.write('From %s %s\n' % (sender_addr, date))
+            fp.write(m.as_string(0))
+            fp.write('\n\n')
+            fp.close()
         else:
+            ui.status('Sending ', m['Subject'], ' ...\n')
             s.sendmail(sender, to + cc, m.as_string(0))
-    if not opts['test']:
+    if not opts['test'] and not opts['mbox']:
         s.close()
 
 cmdtable = {
@@ -269,6 +284,7 @@
       ('f', 'from', '', 'email address of sender'),
       ('', 'plain', None, 'omit hg patch header'),
       ('n', 'test', None, 'print messages that would be sent'),
+      ('m', 'mbox', '', 'write messages to mbox file instead of sending them'),
       ('s', 'subject', '', 'subject of introductory message'),
       ('t', 'to', [], 'email addresses of recipients')],
      "hg email [OPTION]... [REV]...")