Mercurial > dotfiles
comparison unixSoft/bin/hg-email-reply-selected-flags @ 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 | |
| children |
comparison
equal
deleted
inserted
replaced
| 234:0cd241f35c40 | 235:678ed4e870f1 |
|---|---|
| 1 #!/usr/bin/python | |
| 2 # shebang for system python explicitly so we're sure to have pyobjc and | |
| 3 # the scripting bridge. | |
| 4 """apply-patchbomb: apply selected messages in Mail.app to an hg repo in pwd. | |
| 5 | |
| 6 This uses the scripting bridge to talk to Mail and subprocess to pass the | |
| 7 patch to Mercurial on stdin. | |
| 8 """ | |
| 9 import cStringIO | |
| 10 import email | |
| 11 import optparse | |
| 12 import subprocess | |
| 13 import sys | |
| 14 | |
| 15 import ScriptingBridge | |
| 16 | |
| 17 # TODO: use a real shell escape | |
| 18 shell_escape = repr | |
| 19 | |
| 20 def main(argv=sys.argv): | |
| 21 p = optparse.OptionParser() | |
| 22 p.add_option('--from', '-f', dest='from_', help='From address to use for the message.') | |
| 23 options, args = p.parse_args(argv) | |
| 24 assert options.from_ | |
| 25 mail = ScriptingBridge.SBApplication.applicationWithBundleIdentifier_( | |
| 26 'com.apple.Mail') | |
| 27 messages = list(sorted(mail.selection(), | |
| 28 cmp=lambda x,y: cmp(x.subject(), y.subject()))) | |
| 29 data = str(messages[0].source()) | |
| 30 m = email.message_from_string(data) | |
| 31 msgid = m['Message-ID'] | |
| 32 to = m['To'] | |
| 33 cc = m['CC'] | |
| 34 from_ = m['From'] | |
| 35 response_addrs = from_.split(',') + cc.split(',') + to.split(',') | |
| 36 response_addrs = [a for a in response_addrs if options.from_ not in a] | |
| 37 | |
| 38 print '--in-reply-to', shell_escape(msgid), | |
| 39 print '--to', shell_escape(response_addrs[0]), | |
| 40 if len(response_addrs) > 1: | |
| 41 print '--cc', shell_escape(', '.join(response_addrs[1:])), | |
| 42 print '--from', shell_escape(options.from_) | |
| 43 | |
| 44 | |
| 45 if __name__ == '__main__': | |
| 46 sys.exit(main()) |
