#!/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
import re
import 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()
