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)
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)