# HG changeset patch # User Augie Fackler # Date 1291564831 21600 # Node ID 678ed4e870f1a97f852021f4d4b196f68dd2d2ff # Parent 0cd241f35c40d36854162e72fc2792d585c5fc8b hg-email-reply-selected-flags: new script to automate patchbomb replies diff --git a/unixSoft/bin/hg-email-reply-selected-flags b/unixSoft/bin/hg-email-reply-selected-flags 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())