changeset 235:678ed4e870f1

hg-email-reply-selected-flags: new script to automate patchbomb replies
author Augie Fackler <durin42@gmail.com>
date Sun, 05 Dec 2010 10:00:31 -0600
parents 0cd241f35c40
children 3e1ec121efaf
files unixSoft/bin/hg-email-reply-selected-flags
diffstat 1 files changed, 46 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100755
--- /dev/null
+++ b/unixSoft/bin/hg-email-reply-selected-flags
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# shebang for system python explicitly so we're sure to have pyobjc and
+# the scripting bridge.
+"""apply-patchbomb: apply selected messages in Mail.app to an hg repo in pwd.
+
+This uses the scripting bridge to talk to Mail and subprocess to pass the
+patch to Mercurial on stdin.
+"""
+import cStringIO
+import email
+import optparse
+import subprocess
+import sys
+
+import ScriptingBridge
+
+# TODO: use a real shell escape
+shell_escape = repr
+
+def main(argv=sys.argv):
+    p = optparse.OptionParser()
+    p.add_option('--from', '-f', dest='from_', help='From address to use for the message.')
+    options, args = p.parse_args(argv)
+    assert options.from_
+    mail = ScriptingBridge.SBApplication.applicationWithBundleIdentifier_(
+        'com.apple.Mail')
+    messages = list(sorted(mail.selection(),
+                           cmp=lambda x,y: cmp(x.subject(), y.subject())))
+    data = str(messages[0].source())
+    m = email.message_from_string(data)
+    msgid = m['Message-ID']
+    to = m['To']
+    cc = m['CC']
+    from_ = m['From']
+    response_addrs = from_.split(',') + cc.split(',') + to.split(',')
+    response_addrs = [a for a in response_addrs if options.from_ not in a]
+
+    print '--in-reply-to', shell_escape(msgid),
+    print '--to', shell_escape(response_addrs[0]),
+    if len(response_addrs) > 1:
+        print '--cc', shell_escape(', '.join(response_addrs[1:])),
+    print '--from', shell_escape(options.from_)
+
+
+if __name__ == '__main__':
+    sys.exit(main())