Lluís Vilanova <vilan...@ac.upc.edu> writes: > Markus Armbruster writes: > >> Lluís Vilanova <vilan...@ac.upc.edu> writes: > [...] >>> diff --git a/scripts/qapi.py b/scripts/qapi.py >>> index 9b3de4c..59c2b9b 100644 >>> --- a/scripts/qapi.py >>> +++ b/scripts/qapi.py >>> @@ -12,6 +12,7 @@ >>> # See the COPYING.LIB file in the top-level directory. >>> >>> from ordereddict import OrderedDict >>> +import os >>> import sys >>> >>> builtin_types = [ >>> @@ -37,6 +38,7 @@ builtin_type_qtypes = { >>> >>> class QAPISchemaError(Exception): >>> def __init__(self, schema, msg): >>> + self.base = schema.error_base > >> Non-obvious identifiers. Took me some reading on to figure out that >> this is a directory. > > Will fix. > > >>> self.fp = schema.fp >>> self.msg = msg >>> self.line = self.col = 1 >>> @@ -50,12 +52,17 @@ class QAPISchemaError(Exception): >>> self.col += 1 >>> >>> def __str__(self): >>> - return "%s:%s:%s: %s" % (self.fp.name, self.line, self.col, >>> self.msg) >>> + name = os.path.relpath(self.fp.name, self.base) >>> + return "%s:%s:%s: %s" % (name, self.line, self.col, self.msg) > >> Can you explain what this change does, and why it's wanted? > > Paths are shown as relative so that the test outputs (stderr) can be verified > with diff. Otherwise the actual message depends on the path from which you're > running the tests.
Hmm. This is the applicable make rule: $(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: $(SRC_PATH)/%.json $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-qapi.py "$^" >$*.test.out 2>$*.test.err; echo $$? >$*.test.exit, " TEST $*.out") @diff -q $(SRC_PATH)/$*.out $*.test.out @diff -q $(SRC_PATH)/$*.err $*.test.err @diff -q $(SRC_PATH)/$*.exit $*.test.exit Since $^ is in $(SRC_PATH), it's like $(SRC_PATH)/foo.json. If $(SRC_PATH)/foo.json has an error, the error messages duly points to $(SRC_PATH)/foo.json. The "diff -q $(SRC_PATH)/$*.err $*.test.err" fails unless your SRC_PATH matches the one that's encoded in tests/qapi-schema/foo.err. Is that the problem you're trying to solve? [...]