mirror of https://gitee.com/openkylin/qemu.git
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 @@ def check(self):
|
|||
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 @@ def __init__(self, fp, previously_included=[], incl_info=None):
|
|||
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 @@ def reject_expr_doc(doc):
|
|||
% 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 @@ def _include(self, include, info, base_dir, previously_included):
|
|||
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…
Reference in New Issue