diff options
Diffstat (limited to 'utils/git-svn')
| -rwxr-xr-x | utils/git-svn/convert.py | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/utils/git-svn/convert.py b/utils/git-svn/convert.py new file mode 100755 index 000000000000..c230a016b7f0 --- /dev/null +++ b/utils/git-svn/convert.py @@ -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 svn dcommit [--commit-url https://id@llvm.org/svn/llvm-project/lldb/trunk] +""" + +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() | 
