qapi: Improve include file name reporting in error messages
Error messages print absolute file names of included files even if the user gave a relative one on the command line: $ PYTHONPATH=scripts python -B tests/qapi-schema/test-qapi.py tests/qapi-schema/include-cycle.json In file included from tests/qapi-schema/include-cycle.json:1: In file included from /work/armbru/qemu/tests/qapi-schema/include-cycle-b.json:1: /work/armbru/qemu/tests/qapi-schema/include-cycle-c.json:1: Inclusion loop for include-cycle.json Improve this to In file included from tests/qapi-schema/include-cycle.json:1: In file included from tests/qapi-schema/include-cycle-b.json:1: tests/qapi-schema/include-cycle-c.json:1: Inclusion loop for include-cycle.json The error message when an include file can't be opened prints the include directive's file name, which is relative to the including file. Change this to print the file name relative to the working directory. Visible in tests/qapi-schema/include-no-file.err. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20180211093607.27351-12-armbru@redhat.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
907b846653
commit
af97502ce9
@ -259,9 +259,8 @@ class QAPIDoc(object):
|
||||
class QAPISchemaParser(object):
|
||||
|
||||
def __init__(self, fp, previously_included=[], incl_info=None):
|
||||
abs_fname = os.path.abspath(fp.name)
|
||||
self.fname = fp.name
|
||||
previously_included.append(abs_fname)
|
||||
previously_included.append(os.path.abspath(fp.name))
|
||||
self.incl_info = incl_info
|
||||
self.src = fp.read()
|
||||
if self.src == '' or self.src[-1] != '\n':
|
||||
@ -292,7 +291,7 @@ class QAPISchemaParser(object):
|
||||
if not isinstance(include, str):
|
||||
raise QAPISemError(info,
|
||||
"Value of 'include' must be a string")
|
||||
self._include(include, info, os.path.dirname(abs_fname),
|
||||
self._include(include, info, os.path.dirname(self.fname),
|
||||
previously_included)
|
||||
elif "pragma" in expr:
|
||||
self.reject_expr_doc(cur_doc)
|
||||
@ -325,7 +324,8 @@ class QAPISchemaParser(object):
|
||||
% doc.symbol)
|
||||
|
||||
def _include(self, include, info, base_dir, previously_included):
|
||||
incl_abs_fname = os.path.join(base_dir, include)
|
||||
incl_fname = os.path.join(base_dir, include)
|
||||
incl_abs_fname = os.path.abspath(incl_fname)
|
||||
# catch inclusion cycle
|
||||
inf = info
|
||||
while inf:
|
||||
@ -337,9 +337,9 @@ class QAPISchemaParser(object):
|
||||
if incl_abs_fname in previously_included:
|
||||
return
|
||||
try:
|
||||
fobj = open(incl_abs_fname, 'r')
|
||||
fobj = open(incl_fname, 'r')
|
||||
except IOError as e:
|
||||
raise QAPISemError(info, '%s: %s' % (e.strerror, include))
|
||||
raise QAPISemError(info, '%s: %s' % (e.strerror, incl_fname))
|
||||
exprs_include = QAPISchemaParser(fobj, previously_included, info)
|
||||
self.exprs.extend(exprs_include.exprs)
|
||||
self.docs.extend(exprs_include.docs)
|
||||
|
@ -1 +1 @@
|
||||
tests/qapi-schema/include-no-file.json:1: No such file or directory: include-no-file-sub.json
|
||||
tests/qapi-schema/include-no-file.json:1: No such file or directory: tests/qapi-schema/include-no-file-sub.json
|
||||
|
Loading…
x
Reference in New Issue
Block a user