annotate unixSoft/bin/apply-patchbomb @ 525:b0fa9e7cadac

shell: speed things up by golfing out grep
author Augie Fackler <raf@durin42.com>
date Mon, 14 Nov 2022 10:46:11 -0500
parents 6cc5a0550281
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
521
6cc5a0550281 tools: port hg utility scripts to python 3
Augie Fackler <raf@durin42.com>
parents: 379
diff changeset
1 #!/usr/bin/env python
185
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:
521
6cc5a0550281 tools: port hg utility scripts to python 3
Augie Fackler <raf@durin42.com>
parents: 379
diff changeset
21 print('Applying', m.subject())
379
0b8457903012 apply-patchbomb: discard --partial, which doesn't fit my workflow
Augie Fackler <raf@durin42.com>
parents: 333
diff changeset
22 p = subprocess.Popen(['hg', 'import', '--obsolete', '-'], stdin=subprocess.PIPE)
185
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:
521
6cc5a0550281 tools: port hg utility scripts to python 3
Augie Fackler <raf@durin42.com>
parents: 379
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())