From f5fca7c6944e92206a5488aecb81779fd52bfdd1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 1 Mar 2012 22:17:18 +0100 Subject: Print sane error when a fastimport file is incomplete. --- NEWS | 6 ++++++ cmds.py | 20 +++++++++++++++++--- tests/test_commands.py | 10 ++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 518f503..cdbf788 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,12 @@ bzr-fastimport Release Notes 0.14 UNRELEASED +Bug fixes +--------- + +* Print sane error when a fastimport file is incomplete. + (Jelmer Vernooij, #937972) + 0.13 2012-02-29 Changes diff --git a/cmds.py b/cmds.py index 43a2537..128b1be 100644 --- a/cmds.py +++ b/cmds.py @@ -31,12 +31,17 @@ def _run(source, processor_factory, verbose=False, user_map=None, **kwargs): :param processor_factory: a callable for creating a processor :param user_map: if not None, the file containing the user map. """ + from fastimport.errors import ParsingError + from bzrlib.errors import BzrCommandError from fastimport import parser stream = _get_source_stream(source) user_mapper = _get_user_mapper(user_map) proc = processor_factory(verbose=verbose, **kwargs) p = parser.ImportParser(stream, verbose=verbose, user_mapper=user_mapper) - return proc.process(p.iter_commands) + try: + return proc.process(p.iter_commands) + except ParsingError, e: + raise BzrCommandError("%d: Parse error: %s" % (e.lineno, e)) def _get_source_stream(source): @@ -309,13 +314,18 @@ class cmd_fast_import(Command): def _generate_info(self, source): from cStringIO import StringIO from fastimport import parser + from fastimport.errors import ParsingError + from bzrlib.errors import BzrCommandError from bzrlib.plugins.fastimport.processors import info_processor stream = _get_source_stream(source) output = StringIO() try: proc = info_processor.InfoProcessor(verbose=True, outf=output) p = parser.ImportParser(stream) - return_code = proc.process(p.iter_commands) + try: + return_code = proc.process(p.iter_commands) + except ParsingError, e: + raise BzrCommandError("%d: Parse error: %s" % (e.lineno, e)) lines = output.getvalue().splitlines() finally: output.close() @@ -442,12 +452,16 @@ class cmd_fast_import_filter(Command): " a newer python-fastimport to use " "--dont-squash-empty-commits") + from fastimport.errors import ParsingError from fastimport import parser stream = _get_source_stream(source) user_mapper = _get_user_mapper(user_map) proc = filter_processor.FilterProcessor(params=params, verbose=verbose) p = parser.ImportParser(stream, verbose=verbose, user_mapper=user_mapper) - return proc.process(p.iter_commands) + try: + return proc.process(p.iter_commands) + except ParsingError, e: + raise BzrCommandError("%d: Parse error: %s" % (e.lineno, e)) class cmd_fast_import_info(Command): diff --git a/tests/test_commands.py b/tests/test_commands.py index 5053416..88fefd2 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -228,6 +228,16 @@ class TestFastImport(ExternalBase): data = self.run_bzr("fast-import file.fi br")[0] self.assertEquals(1, tree.branch.revno()) + def test_missing_bytes(self): + self.build_tree_contents([('empty.fi', """ +commit refs/heads/master +mark :1 +committer +data 15 +""")]) + self.make_branch_and_tree("br") + self.run_bzr_error(['bzr: ERROR: 4: Parse error: line 4: Command commit is missing section committer\n'], "fast-import empty.fi br") + class TestFastImportFilter(ExternalBase): -- cgit v1.2.1