Mercurial > dotfiles
comparison unixSoft/bin/patchpipe @ 357:c7a9cd793e37
patchpipe: handle base64-encoded message bodies
It looks like the new version of mailman on selenic now base64s
message bodies, so detect that and unpack the base64'd body.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Mon, 22 Dec 2014 17:12:53 -0500 |
parents | 4e83916a4303 |
children | a5a4f9e12c9f |
comparison
equal
deleted
inserted
replaced
356:b9fd69a36e0c | 357:c7a9cd793e37 |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 import base64 | |
2 import os | 3 import os |
3 import subprocess | 4 import subprocess |
4 import sys | 5 import sys |
5 import tempfile | 6 import tempfile |
6 | 7 |
7 _PATCHHDR = '# HG changeset patch' | 8 _PATCHHDR = '# HG changeset patch' |
9 | |
10 _BASE64_MAGIC = 'Content-Transfer-Encoding: base64' | |
8 | 11 |
9 | 12 |
10 def main(argv): | 13 def main(argv): |
11 tf = tempfile.NamedTemporaryFile(suffix='.diff') | 14 tf = tempfile.NamedTemporaryFile(suffix='.diff') |
12 d = sys.stdin.read() | 15 d = sys.stdin.read() |
13 if _PATCHHDR in d: | 16 if _PATCHHDR in d: |
14 junk, d = d.split(_PATCHHDR, 1) | 17 junk, d = d.split(_PATCHHDR, 1) |
15 d = _PATCHHDR + d | 18 d = _PATCHHDR + d |
19 elif _BASE64_MAGIC in d: | |
20 junk, d = d.split('\n\n', 1) | |
21 d = d.decode('base64') | |
16 tf.write(d) | 22 tf.write(d) |
17 tf.flush() | 23 tf.flush() |
18 subprocess.check_call([os.environ['EDITOR'], tf.name], | 24 subprocess.check_call([os.environ['EDITOR'], tf.name], |
19 stdout=sys.stderr) | 25 stdout=sys.stderr) |
20 sys.stdout.write(open(tf.name).read()) | 26 sys.stdout.write(open(tf.name).read()) |