예제 #1
0
def __import_mbox(filename, options):
    """Import a series from an mbox file
    """
    if filename:
        namedtemp = None
    else:
        from tempfile import NamedTemporaryFile
        stdin = os.fdopen(sys.__stdin__.fileno(), 'rb')
        namedtemp = NamedTemporaryFile('wb', suffix='.mbox', delete=False)
        namedtemp.write(stdin.read())
        namedtemp.close()
        filename = namedtemp.name

    try:
        try:
            mbox = mailbox.mbox(filename,
                                message_from_binary_file,
                                create=False)
        except Exception as ex:
            raise CmdException('error parsing the mbox file: %s' % str(ex))

        with closing(mbox):
            for msg in mbox:
                (message, author_name, author_email, author_date,
                 diff) = parse_mail(msg)
                __create_patch(None, message, author_name, author_email,
                               author_date, diff, options)
    finally:
        if namedtemp is not None:
            os.unlink(namedtemp.name)
예제 #2
0
def __import_file(filename, options, patch=None):
    """Import a patch from a file or standard input
    """
    pname = None
    if filename:
        (f, pname) = __get_handle_and_name(filename)
    else:
        f = os.fdopen(sys.__stdin__.fileno(), 'rb')

    if patch:
        pname = patch
    elif not pname:
        pname = filename

    if options.mail:
        try:
            msg = message_from_binary_file(f)
        except Exception as ex:
            raise CmdException('error parsing the e-mail file: %s' % str(ex))
        (message, author_name, author_email, author_date,
         diff) = parse_mail(msg)
    else:
        patch_str = f.read()
        (message, author_name, author_email, author_date,
         diff) = parse_patch(patch_str, contains_diff=True)

    if filename:
        f.close()

    __create_patch(pname, message, author_name, author_email, author_date,
                   diff, options)