annotate unixSoft/bin/apply-patchbomb @ 185:b5d71972aa72

apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
author Augie Fackler <durin42@gmail.com>
date Sat, 30 Jan 2010 12:21:00 -0600
parents
children e8170eba88cd
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 """
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
9
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
10
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
11 import ScriptingBridge
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
12 import subprocess
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
13
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
14 def main():
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
15 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
16 'com.apple.Mail')
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
17 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
18 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
19 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
20 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
21 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
22 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
23 p.stdin.close()
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
24 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
25 print 'hg import failed, bailing'
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
26 break
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
27
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
28 if __name__ == '__main__':
b5d71972aa72 apply-patchbomb: script to apply patchbomb from selected messages in Mail.app.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
29 main()