annotate unixSoft/bin/apply-patchbomb @ 227:e8170eba88cd

apply-patchbomb: clean up imports and improve exit status
author Augie Fackler <durin42@gmail.com>
date Mon, 04 Oct 2010 21:47:22 -0500
parents b5d71972aa72
children 4b661cede8ad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
185
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
1 #!/usr/bin/python
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
2 # shebang for system python explicitly so we're sure to have pyobjc and
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
3 # the scripting bridge.
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
4 """apply-patchbomb: apply selected messages in Mail.app to an hg repo in pwd.
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
6 This uses the scripting bridge to talk to Mail and subprocess to pass the
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
7 patch to Mercurial on stdin.
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
8 """
227
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
9 import email
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
10 import subprocess
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
11 import sys
185
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
12
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
13 import ScriptingBridge
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
14
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
15 def main():
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
16 mail = ScriptingBridge.SBApplication.applicationWithBundleIdentifier_(
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
17 'com.apple.Mail')
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
18 messages = list(sorted(mail.selection(),
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
19 cmp=lambda x,y: cmp(x.subject(), y.subject())))
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
20 for m in messages:
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
21 print 'Applying', m.subject()
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
22 p = subprocess.Popen(['hg', 'import', '-'], stdin=subprocess.PIPE)
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
23 p.stdin.write(m.source())
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
24 p.stdin.close()
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
25 if p.wait() != 0:
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
26 print 'hg import failed, bailing'
227
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
27 return 2
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
28 return 0
185
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
29
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
30 if __name__ == '__main__':
227
e8170eba88cd apply-patchbomb: clean up imports and improve exit status
Augie Fackler <durin42@gmail.com>
parents: 185
diff changeset
31 sys.exit(main())