Add a Python utility to help convert the Mail.app saved 'Raw Message Source' .eml file to a git-am friendly file.

llvm-svn: 131924
This commit is contained in:
Johnny Chen 2011-05-23 21:50:12 +00:00
parent 79763a42ab
commit b5aa97ecc5
2 changed files with 70 additions and 5 deletions

65
lldb/utils/git-svn/convert.py Executable file
View File

@ -0,0 +1,65 @@
#!/usr/bin/env python
"""
Convert the raw message sources from git patch emails to git-am friendly files.
Usage:
1. Mail.app -> Save As -> api.eml (Raw Message Source)
2. .../convert.py api.eml
3. git am --signoff < api.eml
4. git commit -a
"""
import os, re, sys
import StringIO
def usage(problem_file=None):
if problem_file:
print "%s is not a file" % problem_file
print "Usage: convert.py raw-message-source [raw-message-source2 ...]"
sys.exit(0)
def do_convert(file):
"""Skip all preceding mail message headers until 'From: ' is encountered.
Then for each line ('From: ' header included), replace the dos style CRLF
end-of-line with unix style LF end-of-line.
"""
print "converting %s ..." % file
with open(file, 'r') as f_in:
content = f_in.read()
# The new content to be written back to the same file.
new_content = StringIO.StringIO()
# Boolean flag controls whether to start printing lines.
from_header_seen = False
# By default, splitlines() don't include line breaks. CRLF should be gone.
for line in content.splitlines():
# Wait till we scan the 'From: ' header before start printing the lines.
if not from_header_seen:
if not line.startswith('From: '):
continue
else:
from_header_seen = True
print >> new_content, line
with open(file, 'w') as f_out:
f_out.write(new_content.getvalue())
print "done"
def main():
if len(sys.argv) == 1:
usage()
# Convert the raw message source one by one.
for file in sys.argv[1:]:
if not os.path.isfile(file):
usage(file)
do_convert(file)
if __name__ == '__main__':
main()

View File

@ -137,11 +137,11 @@ def do_lldb_disassembly(lldb_commands, exe, disassemble_options, num_symbols, sy
count = count + 1
print "returning symbol:", s.GetName()
yield s.GetName()
#print "start address:", s.GetStartAddress()
#print "end address:", s.GetEndAddress()
#s.GetDescription(stream)
#print "symbol description:", stream.GetData()
#stream.Clear()
print "start address:", s.GetStartAddress()
print "end address:", s.GetEndAddress()
s.GetDescription(stream)
print "symbol description:", stream.GetData()
stream.Clear()
# Disassembly time.
for symbol in symbol_iter(num_symbols, symbols_to_disassemble, target):