summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2012-03-01 22:17:18 +0100
committerJelmer Vernooij <jelmer@samba.org>2012-03-01 22:17:18 +0100
commitf5fca7c6944e92206a5488aecb81779fd52bfdd1 (patch)
tree22bfe769a2843bd6f4c780f48d59c3cce928410b
parente3ffb72b1c05bb2df4d8ab6542b3afd016dab88d (diff)
downloadbzr-fastimport-f5fca7c6944e92206a5488aecb81779fd52bfdd1.tar.gz
Print sane error when a fastimport file is incomplete.
-rw-r--r--NEWS6
-rw-r--r--cmds.py20
-rw-r--r--tests/test_commands.py10
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):