Mercurial > dotfiles
annotate unixSoft/bin/apply-patchbomb @ 372:ce87db9038f5
havepatch: new script to easily check if a mailed patch is applied
Right now this only works on the hg repo, and it assumes the patch was
applied as a descendant of 3.5 to keep the checks quick. In a perfect
world I'd be able to do this all with obsolete marker checks, but that
doesn't seem to be a good option yet.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Tue, 13 Oct 2015 11:04:51 -0400 |
parents | 4b661cede8ad |
children | 0b8457903012 |
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() |
333
4b661cede8ad
apply-patchbomb: create obsolete markers, keep partial applications
Augie Fackler <raf@durin42.com>
parents:
227
diff
changeset
|
22 p = subprocess.Popen(['hg', 'import', '--partial', '--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: |
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()) |