qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] f3d4aa: qapi: Don't suppress doc generation w


From: Peter Maydell
Subject: [Qemu-commits] [qemu/qemu] f3d4aa: qapi: Don't suppress doc generation without pragma...
Date: Wed, 23 Oct 2019 08:04:58 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: f3d4aa5add400018130e2908a400e6b6a9a94f98
      
https://github.com/qemu/qemu/commit/f3d4aa5add400018130e2908a400e6b6a9a94f98
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M scripts/qapi/doc.py
    M tests/Makefile.include

  Log Message:
  -----------
  qapi: Don't suppress doc generation without pragma doc-required

Commit bc52d03ff5 "qapi: Make doc comments optional where we don't
need them" made scripts/qapi2texi.py fail[*] unless the schema had
pragma 'doc-required': true.  The stated reason was inability to cope
with incomplete documentation.

When commit fb0bc835e5 "qapi-gen: New common driver for code and doc
generators" folded scripts/qapi2texi.py into scripts/qapi-gen.py, it
turned the failure into silent suppression.

The doc generator can cope with incomplete documentation now.  I don't
know since when, or what the problem was, or even whether it ever
existed.

Drop the silent suppression.

[*] The fail part was broken, fixed in commit e8ba07ea9a.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: 2a7bbedd7752b77d91eb2db0e8dea23852ce556b
      
https://github.com/qemu/qemu/commit/2a7bbedd7752b77d91eb2db0e8dea23852ce556b
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M scripts/qapi/common.py

  Log Message:
  -----------
  qapi: Store pragma state in QAPISourceInfo, not global state

The frontend can't be run more than once due to its global state.
A future commit will want to do that.

Recent commit "qapi: Move context-sensitive checking to the proper
place" got rid of many global variables already, but pragma state is
still stored in global variables (that's why a pragma directive's
scope is the complete schema).

Move the pragma state to QAPISourceInfo.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: 0002b557b5c8b013087fc18d75d370f11783f619
      
https://github.com/qemu/qemu/commit/0002b557b5c8b013087fc18d75d370f11783f619
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M scripts/qapi/common.py

  Log Message:
  -----------
  qapi: Eliminate accidental global frontend state

The frontend can't be run more than once due to its global state.
A future commit will want to do that.

The only global frontend state remaining is accidental:
QAPISchemaParser.__init__()'s parameter previously_included=[].
Python evaluates the default once, at definition time.  Any
modifications to it are visible in subsequent calls.  Well-known
Python trap.  Change the default to None and replace it by the real
default in the function body.  Use the opportunity to convert
previously_included to a set.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: f01338cce692ac54109f09bc6c7b5567611e2d24
      
https://github.com/qemu/qemu/commit/f01338cce692ac54109f09bc6c7b5567611e2d24
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M tests/Makefile.include
    M tests/qapi-schema/allow-preconfig-test.err
    R tests/qapi-schema/allow-preconfig-test.exit
    M tests/qapi-schema/alternate-any.err
    R tests/qapi-schema/alternate-any.exit
    M tests/qapi-schema/alternate-array.err
    R tests/qapi-schema/alternate-array.exit
    M tests/qapi-schema/alternate-base.err
    R tests/qapi-schema/alternate-base.exit
    M tests/qapi-schema/alternate-branch-if-invalid.err
    R tests/qapi-schema/alternate-branch-if-invalid.exit
    M tests/qapi-schema/alternate-clash.err
    R tests/qapi-schema/alternate-clash.exit
    M tests/qapi-schema/alternate-conflict-bool-string.err
    R tests/qapi-schema/alternate-conflict-bool-string.exit
    M tests/qapi-schema/alternate-conflict-dict.err
    R tests/qapi-schema/alternate-conflict-dict.exit
    M tests/qapi-schema/alternate-conflict-enum-bool.err
    R tests/qapi-schema/alternate-conflict-enum-bool.exit
    M tests/qapi-schema/alternate-conflict-enum-int.err
    R tests/qapi-schema/alternate-conflict-enum-int.exit
    M tests/qapi-schema/alternate-conflict-num-string.err
    R tests/qapi-schema/alternate-conflict-num-string.exit
    M tests/qapi-schema/alternate-conflict-string.err
    R tests/qapi-schema/alternate-conflict-string.exit
    M tests/qapi-schema/alternate-empty.err
    R tests/qapi-schema/alternate-empty.exit
    M tests/qapi-schema/alternate-invalid-dict.err
    R tests/qapi-schema/alternate-invalid-dict.exit
    M tests/qapi-schema/alternate-nested.err
    R tests/qapi-schema/alternate-nested.exit
    M tests/qapi-schema/alternate-unknown.err
    R tests/qapi-schema/alternate-unknown.exit
    M tests/qapi-schema/args-alternate.err
    R tests/qapi-schema/args-alternate.exit
    M tests/qapi-schema/args-any.err
    R tests/qapi-schema/args-any.exit
    M tests/qapi-schema/args-array-empty.err
    R tests/qapi-schema/args-array-empty.exit
    M tests/qapi-schema/args-array-unknown.err
    R tests/qapi-schema/args-array-unknown.exit
    M tests/qapi-schema/args-bad-boxed.err
    R tests/qapi-schema/args-bad-boxed.exit
    M tests/qapi-schema/args-boxed-anon.err
    R tests/qapi-schema/args-boxed-anon.exit
    M tests/qapi-schema/args-boxed-string.err
    R tests/qapi-schema/args-boxed-string.exit
    M tests/qapi-schema/args-int.err
    R tests/qapi-schema/args-int.exit
    M tests/qapi-schema/args-invalid.err
    R tests/qapi-schema/args-invalid.exit
    M tests/qapi-schema/args-member-array-bad.err
    R tests/qapi-schema/args-member-array-bad.exit
    M tests/qapi-schema/args-member-case.err
    R tests/qapi-schema/args-member-case.exit
    M tests/qapi-schema/args-member-unknown.err
    R tests/qapi-schema/args-member-unknown.exit
    M tests/qapi-schema/args-name-clash.err
    R tests/qapi-schema/args-name-clash.exit
    M tests/qapi-schema/args-union.err
    R tests/qapi-schema/args-union.exit
    M tests/qapi-schema/args-unknown.err
    R tests/qapi-schema/args-unknown.exit
    M tests/qapi-schema/bad-base.err
    R tests/qapi-schema/bad-base.exit
    M tests/qapi-schema/bad-data.err
    R tests/qapi-schema/bad-data.exit
    M tests/qapi-schema/bad-ident.err
    R tests/qapi-schema/bad-ident.exit
    M tests/qapi-schema/bad-if-empty-list.err
    R tests/qapi-schema/bad-if-empty-list.exit
    M tests/qapi-schema/bad-if-empty.err
    R tests/qapi-schema/bad-if-empty.exit
    M tests/qapi-schema/bad-if-list.err
    R tests/qapi-schema/bad-if-list.exit
    M tests/qapi-schema/bad-if.err
    R tests/qapi-schema/bad-if.exit
    M tests/qapi-schema/bad-type-bool.err
    R tests/qapi-schema/bad-type-bool.exit
    M tests/qapi-schema/bad-type-dict.err
    R tests/qapi-schema/bad-type-dict.exit
    M tests/qapi-schema/bad-type-int.err
    R tests/qapi-schema/bad-type-int.exit
    M tests/qapi-schema/base-cycle-direct.err
    R tests/qapi-schema/base-cycle-direct.exit
    M tests/qapi-schema/base-cycle-indirect.err
    R tests/qapi-schema/base-cycle-indirect.exit
    M tests/qapi-schema/command-int.err
    R tests/qapi-schema/command-int.exit
    R tests/qapi-schema/comments.exit
    M tests/qapi-schema/doc-bad-alternate-member.err
    R tests/qapi-schema/doc-bad-alternate-member.exit
    M tests/qapi-schema/doc-bad-command-arg.err
    R tests/qapi-schema/doc-bad-command-arg.exit
    R tests/qapi-schema/doc-bad-section.exit
    M tests/qapi-schema/doc-bad-symbol.err
    R tests/qapi-schema/doc-bad-symbol.exit
    M tests/qapi-schema/doc-bad-union-member.err
    R tests/qapi-schema/doc-bad-union-member.exit
    M tests/qapi-schema/doc-before-include.err
    R tests/qapi-schema/doc-before-include.exit
    M tests/qapi-schema/doc-before-pragma.err
    R tests/qapi-schema/doc-before-pragma.exit
    M tests/qapi-schema/doc-duplicated-arg.err
    R tests/qapi-schema/doc-duplicated-arg.exit
    M tests/qapi-schema/doc-duplicated-return.err
    R tests/qapi-schema/doc-duplicated-return.exit
    M tests/qapi-schema/doc-duplicated-since.err
    R tests/qapi-schema/doc-duplicated-since.exit
    M tests/qapi-schema/doc-empty-arg.err
    R tests/qapi-schema/doc-empty-arg.exit
    M tests/qapi-schema/doc-empty-section.err
    R tests/qapi-schema/doc-empty-section.exit
    M tests/qapi-schema/doc-empty-symbol.err
    R tests/qapi-schema/doc-empty-symbol.exit
    R tests/qapi-schema/doc-good.exit
    M tests/qapi-schema/doc-interleaved-section.err
    R tests/qapi-schema/doc-interleaved-section.exit
    M tests/qapi-schema/doc-invalid-end.err
    R tests/qapi-schema/doc-invalid-end.exit
    M tests/qapi-schema/doc-invalid-end2.err
    R tests/qapi-schema/doc-invalid-end2.exit
    M tests/qapi-schema/doc-invalid-return.err
    R tests/qapi-schema/doc-invalid-return.exit
    M tests/qapi-schema/doc-invalid-section.err
    R tests/qapi-schema/doc-invalid-section.exit
    M tests/qapi-schema/doc-invalid-start.err
    R tests/qapi-schema/doc-invalid-start.exit
    M tests/qapi-schema/doc-missing-colon.err
    R tests/qapi-schema/doc-missing-colon.exit
    M tests/qapi-schema/doc-missing-expr.err
    R tests/qapi-schema/doc-missing-expr.exit
    M tests/qapi-schema/doc-missing-space.err
    R tests/qapi-schema/doc-missing-space.exit
    M tests/qapi-schema/doc-missing.err
    R tests/qapi-schema/doc-missing.exit
    M tests/qapi-schema/doc-no-symbol.err
    R tests/qapi-schema/doc-no-symbol.exit
    M tests/qapi-schema/double-type.err
    R tests/qapi-schema/double-type.exit
    M tests/qapi-schema/duplicate-key.err
    R tests/qapi-schema/duplicate-key.exit
    R tests/qapi-schema/empty.exit
    M tests/qapi-schema/enum-bad-member.err
    R tests/qapi-schema/enum-bad-member.exit
    M tests/qapi-schema/enum-bad-name.err
    R tests/qapi-schema/enum-bad-name.exit
    M tests/qapi-schema/enum-bad-prefix.err
    R tests/qapi-schema/enum-bad-prefix.exit
    M tests/qapi-schema/enum-clash-member.err
    R tests/qapi-schema/enum-clash-member.exit
    M tests/qapi-schema/enum-dict-member-unknown.err
    R tests/qapi-schema/enum-dict-member-unknown.exit
    M tests/qapi-schema/enum-if-invalid.err
    R tests/qapi-schema/enum-if-invalid.exit
    M tests/qapi-schema/enum-int-member.err
    R tests/qapi-schema/enum-int-member.exit
    M tests/qapi-schema/enum-member-case.err
    R tests/qapi-schema/enum-member-case.exit
    M tests/qapi-schema/enum-missing-data.err
    R tests/qapi-schema/enum-missing-data.exit
    M tests/qapi-schema/enum-wrong-data.err
    R tests/qapi-schema/enum-wrong-data.exit
    M tests/qapi-schema/escape-outside-string.err
    M tests/qapi-schema/event-boxed-empty.err
    R tests/qapi-schema/event-boxed-empty.exit
    R tests/qapi-schema/event-case.exit
    M tests/qapi-schema/event-member-invalid-dict.err
    R tests/qapi-schema/event-member-invalid-dict.exit
    M tests/qapi-schema/event-nest-struct.err
    R tests/qapi-schema/event-nest-struct.exit
    M tests/qapi-schema/features-bad-type.err
    R tests/qapi-schema/features-bad-type.exit
    M tests/qapi-schema/features-duplicate-name.err
    R tests/qapi-schema/features-duplicate-name.exit
    M tests/qapi-schema/features-if-invalid.err
    R tests/qapi-schema/features-if-invalid.exit
    M tests/qapi-schema/features-missing-name.err
    R tests/qapi-schema/features-missing-name.exit
    M tests/qapi-schema/features-name-bad-type.err
    R tests/qapi-schema/features-name-bad-type.exit
    M tests/qapi-schema/features-no-list.err
    R tests/qapi-schema/features-no-list.exit
    M tests/qapi-schema/features-unknown-key.err
    R tests/qapi-schema/features-unknown-key.exit
    M tests/qapi-schema/flat-union-array-branch.err
    R tests/qapi-schema/flat-union-array-branch.exit
    M tests/qapi-schema/flat-union-bad-base.err
    R tests/qapi-schema/flat-union-bad-base.exit
    M tests/qapi-schema/flat-union-bad-discriminator.err
    R tests/qapi-schema/flat-union-bad-discriminator.exit
    M tests/qapi-schema/flat-union-base-any.err
    R tests/qapi-schema/flat-union-base-any.exit
    M tests/qapi-schema/flat-union-base-union.err
    R tests/qapi-schema/flat-union-base-union.exit
    M tests/qapi-schema/flat-union-clash-member.err
    R tests/qapi-schema/flat-union-clash-member.exit
    M tests/qapi-schema/flat-union-discriminator-bad-name.err
    R tests/qapi-schema/flat-union-discriminator-bad-name.exit
    M tests/qapi-schema/flat-union-empty.err
    R tests/qapi-schema/flat-union-empty.exit
    M tests/qapi-schema/flat-union-inline-invalid-dict.err
    R tests/qapi-schema/flat-union-inline-invalid-dict.exit
    M tests/qapi-schema/flat-union-inline.err
    R tests/qapi-schema/flat-union-inline.exit
    M tests/qapi-schema/flat-union-int-branch.err
    R tests/qapi-schema/flat-union-int-branch.exit
    M tests/qapi-schema/flat-union-invalid-branch-key.err
    R tests/qapi-schema/flat-union-invalid-branch-key.exit
    M tests/qapi-schema/flat-union-invalid-discriminator.err
    R tests/qapi-schema/flat-union-invalid-discriminator.exit
    M tests/qapi-schema/flat-union-invalid-if-discriminator.err
    R tests/qapi-schema/flat-union-invalid-if-discriminator.exit
    M tests/qapi-schema/flat-union-no-base.err
    R tests/qapi-schema/flat-union-no-base.exit
    M tests/qapi-schema/flat-union-optional-discriminator.err
    R tests/qapi-schema/flat-union-optional-discriminator.exit
    M tests/qapi-schema/flat-union-string-discriminator.err
    R tests/qapi-schema/flat-union-string-discriminator.exit
    M tests/qapi-schema/funny-char.err
    R tests/qapi-schema/funny-char.exit
    M tests/qapi-schema/funny-word.err
    R tests/qapi-schema/funny-word.exit
    M tests/qapi-schema/ident-with-escape.err
    R tests/qapi-schema/ident-with-escape.exit
    M tests/qapi-schema/include-before-err.err
    R tests/qapi-schema/include-before-err.exit
    M tests/qapi-schema/include-cycle.err
    R tests/qapi-schema/include-cycle.exit
    M tests/qapi-schema/include-extra-junk.err
    R tests/qapi-schema/include-extra-junk.exit
    M tests/qapi-schema/include-nested-err.err
    R tests/qapi-schema/include-nested-err.exit
    M tests/qapi-schema/include-no-file.err
    R tests/qapi-schema/include-no-file.exit
    M tests/qapi-schema/include-non-file.err
    R tests/qapi-schema/include-non-file.exit
    R tests/qapi-schema/include-repetition.exit
    M tests/qapi-schema/include-self-cycle.err
    R tests/qapi-schema/include-self-cycle.exit
    R tests/qapi-schema/include-simple.exit
    R tests/qapi-schema/indented-expr.exit
    M tests/qapi-schema/leading-comma-list.err
    R tests/qapi-schema/leading-comma-list.exit
    M tests/qapi-schema/leading-comma-object.err
    R tests/qapi-schema/leading-comma-object.exit
    M tests/qapi-schema/missing-colon.err
    R tests/qapi-schema/missing-colon.exit
    M tests/qapi-schema/missing-comma-list.err
    R tests/qapi-schema/missing-comma-list.exit
    M tests/qapi-schema/missing-comma-object.err
    R tests/qapi-schema/missing-comma-object.exit
    M tests/qapi-schema/missing-type.err
    R tests/qapi-schema/missing-type.exit
    M tests/qapi-schema/nested-struct-data-invalid-dict.err
    R tests/qapi-schema/nested-struct-data-invalid-dict.exit
    M tests/qapi-schema/nested-struct-data.err
    R tests/qapi-schema/nested-struct-data.exit
    M tests/qapi-schema/non-objects.err
    R tests/qapi-schema/non-objects.exit
    M tests/qapi-schema/oob-test.err
    R tests/qapi-schema/oob-test.exit
    M tests/qapi-schema/pragma-doc-required-crap.err
    R tests/qapi-schema/pragma-doc-required-crap.exit
    M tests/qapi-schema/pragma-extra-junk.err
    R tests/qapi-schema/pragma-extra-junk.exit
    M tests/qapi-schema/pragma-name-case-whitelist-crap.err
    R tests/qapi-schema/pragma-name-case-whitelist-crap.exit
    M tests/qapi-schema/pragma-non-dict.err
    R tests/qapi-schema/pragma-non-dict.exit
    M tests/qapi-schema/pragma-returns-whitelist-crap.err
    R tests/qapi-schema/pragma-returns-whitelist-crap.exit
    M tests/qapi-schema/pragma-unknown.err
    R tests/qapi-schema/pragma-unknown.exit
    R tests/qapi-schema/qapi-schema-test.exit
    M tests/qapi-schema/quoted-structural-chars.err
    R tests/qapi-schema/quoted-structural-chars.exit
    M tests/qapi-schema/redefined-builtin.err
    R tests/qapi-schema/redefined-builtin.exit
    M tests/qapi-schema/redefined-command.err
    R tests/qapi-schema/redefined-command.exit
    M tests/qapi-schema/redefined-event.err
    R tests/qapi-schema/redefined-event.exit
    M tests/qapi-schema/redefined-type.err
    R tests/qapi-schema/redefined-type.exit
    M tests/qapi-schema/reserved-command-q.err
    R tests/qapi-schema/reserved-command-q.exit
    M tests/qapi-schema/reserved-enum-q.err
    R tests/qapi-schema/reserved-enum-q.exit
    M tests/qapi-schema/reserved-member-has.err
    R tests/qapi-schema/reserved-member-has.exit
    M tests/qapi-schema/reserved-member-q.err
    R tests/qapi-schema/reserved-member-q.exit
    M tests/qapi-schema/reserved-member-u.err
    R tests/qapi-schema/reserved-member-u.exit
    M tests/qapi-schema/reserved-member-underscore.err
    R tests/qapi-schema/reserved-member-underscore.exit
    M tests/qapi-schema/reserved-type-kind.err
    R tests/qapi-schema/reserved-type-kind.exit
    M tests/qapi-schema/reserved-type-list.err
    R tests/qapi-schema/reserved-type-list.exit
    M tests/qapi-schema/returns-alternate.err
    R tests/qapi-schema/returns-alternate.exit
    M tests/qapi-schema/returns-array-bad.err
    R tests/qapi-schema/returns-array-bad.exit
    M tests/qapi-schema/returns-dict.err
    R tests/qapi-schema/returns-dict.exit
    M tests/qapi-schema/returns-unknown.err
    R tests/qapi-schema/returns-unknown.exit
    M tests/qapi-schema/returns-whitelist.err
    R tests/qapi-schema/returns-whitelist.exit
    M tests/qapi-schema/string-code-point-127.err
    R tests/qapi-schema/string-code-point-127.exit
    M tests/qapi-schema/string-code-point-31.err
    R tests/qapi-schema/string-code-point-31.exit
    M tests/qapi-schema/struct-base-clash-deep.err
    R tests/qapi-schema/struct-base-clash-deep.exit
    M tests/qapi-schema/struct-base-clash.err
    R tests/qapi-schema/struct-base-clash.exit
    M tests/qapi-schema/struct-data-invalid.err
    R tests/qapi-schema/struct-data-invalid.exit
    M tests/qapi-schema/struct-member-if-invalid.err
    R tests/qapi-schema/struct-member-if-invalid.exit
    M tests/qapi-schema/struct-member-invalid-dict.err
    R tests/qapi-schema/struct-member-invalid-dict.exit
    M tests/qapi-schema/struct-member-invalid.err
    R tests/qapi-schema/struct-member-invalid.exit
    M tests/qapi-schema/test-qapi.py
    M tests/qapi-schema/trailing-comma-list.err
    R tests/qapi-schema/trailing-comma-list.exit
    M tests/qapi-schema/trailing-comma-object.err
    R tests/qapi-schema/trailing-comma-object.exit
    M tests/qapi-schema/type-bypass-bad-gen.err
    R tests/qapi-schema/type-bypass-bad-gen.exit
    M tests/qapi-schema/unclosed-list.err
    R tests/qapi-schema/unclosed-list.exit
    M tests/qapi-schema/unclosed-object.err
    R tests/qapi-schema/unclosed-object.exit
    M tests/qapi-schema/unclosed-string.err
    R tests/qapi-schema/unclosed-string.exit
    M tests/qapi-schema/union-base-empty.err
    R tests/qapi-schema/union-base-empty.exit
    M tests/qapi-schema/union-base-no-discriminator.err
    R tests/qapi-schema/union-base-no-discriminator.exit
    M tests/qapi-schema/union-branch-case.err
    R tests/qapi-schema/union-branch-case.exit
    M tests/qapi-schema/union-branch-if-invalid.err
    R tests/qapi-schema/union-branch-if-invalid.exit
    M tests/qapi-schema/union-branch-invalid-dict.err
    R tests/qapi-schema/union-branch-invalid-dict.exit
    M tests/qapi-schema/union-clash-branches.err
    R tests/qapi-schema/union-clash-branches.exit
    M tests/qapi-schema/union-empty.err
    R tests/qapi-schema/union-empty.exit
    M tests/qapi-schema/union-invalid-base.err
    R tests/qapi-schema/union-invalid-base.exit
    M tests/qapi-schema/union-optional-branch.err
    R tests/qapi-schema/union-optional-branch.exit
    M tests/qapi-schema/union-unknown.err
    R tests/qapi-schema/union-unknown.exit
    M tests/qapi-schema/unknown-escape.err
    R tests/qapi-schema/unknown-escape.exit
    M tests/qapi-schema/unknown-expr-key.err
    R tests/qapi-schema/unknown-expr-key.exit

  Log Message:
  -----------
  qapi: Speed up frontend tests

"make check-qapi-schema" takes around 10s user + system time for me.
With -j, it takes a bit over 3s real time.  We have worse tests.  It's
still annoying when you work on the QAPI generator.

Some 1.4s user + system time is consumed by make figuring out what to
do, measured by making a target that does nothing.  There's nothing I
can do about that right now.  But let's see what we can do about the
other 8s.

Almost 7s are spent running test-qapi.py for every test case, the rest
normalizing and diffing test-qapi.py output.  We have 190 test cases.

If I downgrade to python2, it's 4.5s, but python2 is a goner.

Hacking up test-qapi.py to exit(0) without doing anything makes it
only marginally faster.  The problem is Python startup overhead.

Our configure puts -B into $(PYTHON).  Running without -B is faster:
4.4s.

We could improve the Makefile to run test cases only when the test
case or the generator changed.  But I'm after improvement in the case
where the generator changed.

test-qapi.py is designed to be the simplest possible building block
for a shell script to do the complete job (it's actually a Makefile,
not a shell script; no real difference).  Python is just not meant for
that.  It's for bigger blocks.

Move the post-processing and diffing into test-qapi.py, and make it
capable of testing multiple schema files.  Set executable bits while
there.

Running it once per test case now takes slightly longer than 8s.  But
running it once for all of them takes under 0.2s.

Messing with the Makefile to run it only on the tests that need
retesting is clearly not worth the bother.

Expected error output changes because the new normalization strips off
$(SRCDIR)/tests/qapi-schema/ instead of just $(SRCDIR)/.

The .exit files go away, because there is no exit status to test
anymore.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: 61bfb2e1a4666817b9d94f0a96109f8ef51b812b
      
https://github.com/qemu/qemu/commit/61bfb2e1a4666817b9d94f0a96109f8ef51b812b
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M scripts/qapi/common.py
    M scripts/qapi/events.py
    M scripts/qapi/types.py

  Log Message:
  -----------
  qapi: Move gen_enum(), gen_enum_lookup() back to qapi/types.py

The next commit will split up qapi/common.py.  gen_enum() needs
QAPISchemaEnumMember, and that's in the way.  Move it to qapi/types.py
along with its buddy gen_enum_lookup().

Permit me a short a digression on history: how did gen_enum() end up
in qapi/common.py?  Commit 21cd70dfc1 "qapi script: add event support"
duplicated qapi-types.py's gen_enum() and gen_enum_lookup() in
qapi-event.py.  Simply importing them would have been cleaner, but
wasn't possible as qapi-types.py was a program, not a module.  Commit
efd2eaa6c2 "qapi: De-duplicate enum code generation" de-duplicated by
moving them to qapi.py, which was a module.

Since then, program qapi-types.py has morphed into module types.py.
It's where gen_enum() and gen_enum_lookup() started, and where they
belong.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: e6c42b96b9a0fa58cf49bb85cdf473d87fabbeb6
      
https://github.com/qemu/qemu/commit/e6c42b96b9a0fa58cf49bb85cdf473d87fabbeb6
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M Makefile
    M scripts/qapi-gen.py
    M scripts/qapi/commands.py
    M scripts/qapi/common.py
    M scripts/qapi/doc.py
    A scripts/qapi/error.py
    M scripts/qapi/events.py
    A scripts/qapi/expr.py
    A scripts/qapi/gen.py
    M scripts/qapi/introspect.py
    A scripts/qapi/parser.py
    A scripts/qapi/schema.py
    A scripts/qapi/source.py
    M scripts/qapi/types.py
    M scripts/qapi/visit.py
    M tests/Makefile.include
    M tests/qapi-schema/test-qapi.py

  Log Message:
  -----------
  qapi: Split up scripts/qapi/common.py

The QAPI code generator clocks in at some 3100 SLOC in 8 source files.
Almost 60% of the code is in qapi/common.py.  Split it into more
focused modules:

* Move QAPISchemaPragma and QAPISourceInfo to qapi/source.py.

* Move QAPIError and its sub-classes to qapi/error.py.

* Move QAPISchemaParser and QAPIDoc to parser.py.  Use the opportunity
  to put QAPISchemaParser first.

* Move check_expr() & friends to qapi/expr.py.  Use the opportunity to
  put the code into a more sensible order.

* Move QAPISchema & friends to qapi/schema.py

* Move QAPIGen and its sub-classes, ifcontext,
  QAPISchemaModularCVisitor, and QAPISchemaModularCVisitor to qapi/gen.py

* Delete camel_case(), it's unused since commit e98859a9b9 "qapi:
  Clean up after recent conversions to QAPISchemaVisitor"

A number of helper functions remain in qapi/common.py.  I considered
moving the code generator helpers to qapi/gen.py, but decided not to.
Perhaps we should rewrite them as methods of QAPIGen some day.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
[Add "# -*- coding: utf-8 -*-" lines]


  Commit: 02ac641a4dd8c7c1b877dddff3deda2f9a8a4418
      
https://github.com/qemu/qemu/commit/02ac641a4dd8c7c1b877dddff3deda2f9a8a4418
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M scripts/qapi/doc.py

  Log Message:
  -----------
  qapi: Clear scripts/qapi/doc.py executable bits again

Commit fbf09a2fa4 "qapi: add 'ifcond' to visitor methods" brought back
the executable bits.  Fix that.  Drop the #! line for good measure.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>


  Commit: 758f272b6de428fcd523067f7a507cc7257d4ab0
      
https://github.com/qemu/qemu/commit/758f272b6de428fcd523067f7a507cc7257d4ab0
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M tests/qapi-schema/doc-good.out
    M tests/qapi-schema/event-case.out
    M tests/qapi-schema/indented-expr.out
    M tests/qapi-schema/qapi-schema-test.out
    M tests/qapi-schema/test-qapi.py

  Log Message:
  -----------
  tests/qapi-schema: Tidy up test output indentation

Command and event details are indented three spaces, everything else
four.  Messed up in commit 156402e5042.  Use four spaces consistently.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Peter Krempa <address@hidden>
Message-Id: <address@hidden>


  Commit: 23394b4c393c832aa3891533587ff97e04c70883
      
https://github.com/qemu/qemu/commit/23394b4c393c832aa3891533587ff97e04c70883
  Author: Peter Krempa <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M docs/devel/qapi-code-gen.txt
    M qapi/introspect.json
    M scripts/qapi/commands.py
    M scripts/qapi/doc.py
    M scripts/qapi/expr.py
    M scripts/qapi/introspect.py
    M scripts/qapi/schema.py
    M tests/qapi-schema/test-qapi.py

  Log Message:
  -----------
  qapi: Add feature flags to commands

Similarly to features for struct types introduce the feature flags also
for commands. This will allow notifying management layers of fixes and
compatible changes in the behaviour of a command which may not be
detectable any other way.

The changes were heavily inspired by commit 6a8c0b51025.

Signed-off-by: Peter Krempa <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>


  Commit: 2e2e0df2706886488caf3d0dd22d4fe3acc4d4e0
      
https://github.com/qemu/qemu/commit/2e2e0df2706886488caf3d0dd22d4fe3acc4d4e0
  Author: Peter Krempa <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M tests/qapi-schema/qapi-schema-test.json
    M tests/qapi-schema/qapi-schema-test.out
    M tests/qapi-schema/test-qapi.py
    M tests/test-qmp-cmds.c

  Log Message:
  -----------
  tests: qapi: Test 'features' of commands

Signed-off-by: Peter Krempa <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>


  Commit: 79598c8a634c21de9ac7b5a04c03bf4f13967191
      
https://github.com/qemu/qemu/commit/79598c8a634c21de9ac7b5a04c03bf4f13967191
  Author: Markus Armbruster <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M tests/qapi-schema/doc-good.json
    M tests/qapi-schema/doc-good.out
    M tests/qapi-schema/doc-good.texi

  Log Message:
  -----------
  tests/qapi-schema: Cover feature documentation comments

Commit 8aa3a33e44 "tests/qapi-schema: Test for good feature lists in
structs" neglected to cover documentation comments, and the previous
commit followed its example.  Make up for them.

Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 5f76a7aac156ca75680dad5df4a385fd0b58f6b1
      
https://github.com/qemu/qemu/commit/5f76a7aac156ca75680dad5df4a385fd0b58f6b1
  Author: Peter Krempa <address@hidden>
  Date:   2019-10-22 (Tue, 22 Oct 2019)

  Changed paths:
    M qapi/misc.json

  Log Message:
  -----------
  qapi: Allow introspecting fix for savevm's cooperation with blockdev

'savevm' was buggy as it considered all monitor-owned block device
nodes for snapshot. With the introduction of -blockdev, the common
usage made all nodes including protocol and backing file nodes be
monitor-owned and thus considered for snapshot.

This is a problem since the 'file' protocol nodes can't have internal
snapshots and it does not make sense to take snapshot of nodes
representing backing files.

This was fixed by commit 05f4aced658a02b02. Clients need to be able to
detect whether this fix is present.

Since savevm does not have an QMP alternative, add the feature for the
'human-monitor-command' backdoor which is used to call this command in
modern use.

Signed-off-by: Peter Krempa <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>


  Commit: 69717d0f890e14cbdd668297751f9446d2e2a8fd
      
https://github.com/qemu/qemu/commit/69717d0f890e14cbdd668297751f9446d2e2a8fd
  Author: Peter Maydell <address@hidden>
  Date:   2019-10-23 (Wed, 23 Oct 2019)

  Changed paths:
    M Makefile
    M docs/devel/qapi-code-gen.txt
    M qapi/introspect.json
    M qapi/misc.json
    M scripts/qapi-gen.py
    M scripts/qapi/commands.py
    M scripts/qapi/common.py
    M scripts/qapi/doc.py
    A scripts/qapi/error.py
    M scripts/qapi/events.py
    A scripts/qapi/expr.py
    A scripts/qapi/gen.py
    M scripts/qapi/introspect.py
    A scripts/qapi/parser.py
    A scripts/qapi/schema.py
    A scripts/qapi/source.py
    M scripts/qapi/types.py
    M scripts/qapi/visit.py
    M tests/Makefile.include
    M tests/qapi-schema/allow-preconfig-test.err
    R tests/qapi-schema/allow-preconfig-test.exit
    M tests/qapi-schema/alternate-any.err
    R tests/qapi-schema/alternate-any.exit
    M tests/qapi-schema/alternate-array.err
    R tests/qapi-schema/alternate-array.exit
    M tests/qapi-schema/alternate-base.err
    R tests/qapi-schema/alternate-base.exit
    M tests/qapi-schema/alternate-branch-if-invalid.err
    R tests/qapi-schema/alternate-branch-if-invalid.exit
    M tests/qapi-schema/alternate-clash.err
    R tests/qapi-schema/alternate-clash.exit
    M tests/qapi-schema/alternate-conflict-bool-string.err
    R tests/qapi-schema/alternate-conflict-bool-string.exit
    M tests/qapi-schema/alternate-conflict-dict.err
    R tests/qapi-schema/alternate-conflict-dict.exit
    M tests/qapi-schema/alternate-conflict-enum-bool.err
    R tests/qapi-schema/alternate-conflict-enum-bool.exit
    M tests/qapi-schema/alternate-conflict-enum-int.err
    R tests/qapi-schema/alternate-conflict-enum-int.exit
    M tests/qapi-schema/alternate-conflict-num-string.err
    R tests/qapi-schema/alternate-conflict-num-string.exit
    M tests/qapi-schema/alternate-conflict-string.err
    R tests/qapi-schema/alternate-conflict-string.exit
    M tests/qapi-schema/alternate-empty.err
    R tests/qapi-schema/alternate-empty.exit
    M tests/qapi-schema/alternate-invalid-dict.err
    R tests/qapi-schema/alternate-invalid-dict.exit
    M tests/qapi-schema/alternate-nested.err
    R tests/qapi-schema/alternate-nested.exit
    M tests/qapi-schema/alternate-unknown.err
    R tests/qapi-schema/alternate-unknown.exit
    M tests/qapi-schema/args-alternate.err
    R tests/qapi-schema/args-alternate.exit
    M tests/qapi-schema/args-any.err
    R tests/qapi-schema/args-any.exit
    M tests/qapi-schema/args-array-empty.err
    R tests/qapi-schema/args-array-empty.exit
    M tests/qapi-schema/args-array-unknown.err
    R tests/qapi-schema/args-array-unknown.exit
    M tests/qapi-schema/args-bad-boxed.err
    R tests/qapi-schema/args-bad-boxed.exit
    M tests/qapi-schema/args-boxed-anon.err
    R tests/qapi-schema/args-boxed-anon.exit
    M tests/qapi-schema/args-boxed-string.err
    R tests/qapi-schema/args-boxed-string.exit
    M tests/qapi-schema/args-int.err
    R tests/qapi-schema/args-int.exit
    M tests/qapi-schema/args-invalid.err
    R tests/qapi-schema/args-invalid.exit
    M tests/qapi-schema/args-member-array-bad.err
    R tests/qapi-schema/args-member-array-bad.exit
    M tests/qapi-schema/args-member-case.err
    R tests/qapi-schema/args-member-case.exit
    M tests/qapi-schema/args-member-unknown.err
    R tests/qapi-schema/args-member-unknown.exit
    M tests/qapi-schema/args-name-clash.err
    R tests/qapi-schema/args-name-clash.exit
    M tests/qapi-schema/args-union.err
    R tests/qapi-schema/args-union.exit
    M tests/qapi-schema/args-unknown.err
    R tests/qapi-schema/args-unknown.exit
    M tests/qapi-schema/bad-base.err
    R tests/qapi-schema/bad-base.exit
    M tests/qapi-schema/bad-data.err
    R tests/qapi-schema/bad-data.exit
    M tests/qapi-schema/bad-ident.err
    R tests/qapi-schema/bad-ident.exit
    M tests/qapi-schema/bad-if-empty-list.err
    R tests/qapi-schema/bad-if-empty-list.exit
    M tests/qapi-schema/bad-if-empty.err
    R tests/qapi-schema/bad-if-empty.exit
    M tests/qapi-schema/bad-if-list.err
    R tests/qapi-schema/bad-if-list.exit
    M tests/qapi-schema/bad-if.err
    R tests/qapi-schema/bad-if.exit
    M tests/qapi-schema/bad-type-bool.err
    R tests/qapi-schema/bad-type-bool.exit
    M tests/qapi-schema/bad-type-dict.err
    R tests/qapi-schema/bad-type-dict.exit
    M tests/qapi-schema/bad-type-int.err
    R tests/qapi-schema/bad-type-int.exit
    M tests/qapi-schema/base-cycle-direct.err
    R tests/qapi-schema/base-cycle-direct.exit
    M tests/qapi-schema/base-cycle-indirect.err
    R tests/qapi-schema/base-cycle-indirect.exit
    M tests/qapi-schema/command-int.err
    R tests/qapi-schema/command-int.exit
    R tests/qapi-schema/comments.exit
    M tests/qapi-schema/doc-bad-alternate-member.err
    R tests/qapi-schema/doc-bad-alternate-member.exit
    M tests/qapi-schema/doc-bad-command-arg.err
    R tests/qapi-schema/doc-bad-command-arg.exit
    R tests/qapi-schema/doc-bad-section.exit
    M tests/qapi-schema/doc-bad-symbol.err
    R tests/qapi-schema/doc-bad-symbol.exit
    M tests/qapi-schema/doc-bad-union-member.err
    R tests/qapi-schema/doc-bad-union-member.exit
    M tests/qapi-schema/doc-before-include.err
    R tests/qapi-schema/doc-before-include.exit
    M tests/qapi-schema/doc-before-pragma.err
    R tests/qapi-schema/doc-before-pragma.exit
    M tests/qapi-schema/doc-duplicated-arg.err
    R tests/qapi-schema/doc-duplicated-arg.exit
    M tests/qapi-schema/doc-duplicated-return.err
    R tests/qapi-schema/doc-duplicated-return.exit
    M tests/qapi-schema/doc-duplicated-since.err
    R tests/qapi-schema/doc-duplicated-since.exit
    M tests/qapi-schema/doc-empty-arg.err
    R tests/qapi-schema/doc-empty-arg.exit
    M tests/qapi-schema/doc-empty-section.err
    R tests/qapi-schema/doc-empty-section.exit
    M tests/qapi-schema/doc-empty-symbol.err
    R tests/qapi-schema/doc-empty-symbol.exit
    R tests/qapi-schema/doc-good.exit
    M tests/qapi-schema/doc-good.json
    M tests/qapi-schema/doc-good.out
    M tests/qapi-schema/doc-good.texi
    M tests/qapi-schema/doc-interleaved-section.err
    R tests/qapi-schema/doc-interleaved-section.exit
    M tests/qapi-schema/doc-invalid-end.err
    R tests/qapi-schema/doc-invalid-end.exit
    M tests/qapi-schema/doc-invalid-end2.err
    R tests/qapi-schema/doc-invalid-end2.exit
    M tests/qapi-schema/doc-invalid-return.err
    R tests/qapi-schema/doc-invalid-return.exit
    M tests/qapi-schema/doc-invalid-section.err
    R tests/qapi-schema/doc-invalid-section.exit
    M tests/qapi-schema/doc-invalid-start.err
    R tests/qapi-schema/doc-invalid-start.exit
    M tests/qapi-schema/doc-missing-colon.err
    R tests/qapi-schema/doc-missing-colon.exit
    M tests/qapi-schema/doc-missing-expr.err
    R tests/qapi-schema/doc-missing-expr.exit
    M tests/qapi-schema/doc-missing-space.err
    R tests/qapi-schema/doc-missing-space.exit
    M tests/qapi-schema/doc-missing.err
    R tests/qapi-schema/doc-missing.exit
    M tests/qapi-schema/doc-no-symbol.err
    R tests/qapi-schema/doc-no-symbol.exit
    M tests/qapi-schema/double-type.err
    R tests/qapi-schema/double-type.exit
    M tests/qapi-schema/duplicate-key.err
    R tests/qapi-schema/duplicate-key.exit
    R tests/qapi-schema/empty.exit
    M tests/qapi-schema/enum-bad-member.err
    R tests/qapi-schema/enum-bad-member.exit
    M tests/qapi-schema/enum-bad-name.err
    R tests/qapi-schema/enum-bad-name.exit
    M tests/qapi-schema/enum-bad-prefix.err
    R tests/qapi-schema/enum-bad-prefix.exit
    M tests/qapi-schema/enum-clash-member.err
    R tests/qapi-schema/enum-clash-member.exit
    M tests/qapi-schema/enum-dict-member-unknown.err
    R tests/qapi-schema/enum-dict-member-unknown.exit
    M tests/qapi-schema/enum-if-invalid.err
    R tests/qapi-schema/enum-if-invalid.exit
    M tests/qapi-schema/enum-int-member.err
    R tests/qapi-schema/enum-int-member.exit
    M tests/qapi-schema/enum-member-case.err
    R tests/qapi-schema/enum-member-case.exit
    M tests/qapi-schema/enum-missing-data.err
    R tests/qapi-schema/enum-missing-data.exit
    M tests/qapi-schema/enum-wrong-data.err
    R tests/qapi-schema/enum-wrong-data.exit
    M tests/qapi-schema/escape-outside-string.err
    M tests/qapi-schema/event-boxed-empty.err
    R tests/qapi-schema/event-boxed-empty.exit
    R tests/qapi-schema/event-case.exit
    M tests/qapi-schema/event-case.out
    M tests/qapi-schema/event-member-invalid-dict.err
    R tests/qapi-schema/event-member-invalid-dict.exit
    M tests/qapi-schema/event-nest-struct.err
    R tests/qapi-schema/event-nest-struct.exit
    M tests/qapi-schema/features-bad-type.err
    R tests/qapi-schema/features-bad-type.exit
    M tests/qapi-schema/features-duplicate-name.err
    R tests/qapi-schema/features-duplicate-name.exit
    M tests/qapi-schema/features-if-invalid.err
    R tests/qapi-schema/features-if-invalid.exit
    M tests/qapi-schema/features-missing-name.err
    R tests/qapi-schema/features-missing-name.exit
    M tests/qapi-schema/features-name-bad-type.err
    R tests/qapi-schema/features-name-bad-type.exit
    M tests/qapi-schema/features-no-list.err
    R tests/qapi-schema/features-no-list.exit
    M tests/qapi-schema/features-unknown-key.err
    R tests/qapi-schema/features-unknown-key.exit
    M tests/qapi-schema/flat-union-array-branch.err
    R tests/qapi-schema/flat-union-array-branch.exit
    M tests/qapi-schema/flat-union-bad-base.err
    R tests/qapi-schema/flat-union-bad-base.exit
    M tests/qapi-schema/flat-union-bad-discriminator.err
    R tests/qapi-schema/flat-union-bad-discriminator.exit
    M tests/qapi-schema/flat-union-base-any.err
    R tests/qapi-schema/flat-union-base-any.exit
    M tests/qapi-schema/flat-union-base-union.err
    R tests/qapi-schema/flat-union-base-union.exit
    M tests/qapi-schema/flat-union-clash-member.err
    R tests/qapi-schema/flat-union-clash-member.exit
    M tests/qapi-schema/flat-union-discriminator-bad-name.err
    R tests/qapi-schema/flat-union-discriminator-bad-name.exit
    M tests/qapi-schema/flat-union-empty.err
    R tests/qapi-schema/flat-union-empty.exit
    M tests/qapi-schema/flat-union-inline-invalid-dict.err
    R tests/qapi-schema/flat-union-inline-invalid-dict.exit
    M tests/qapi-schema/flat-union-inline.err
    R tests/qapi-schema/flat-union-inline.exit
    M tests/qapi-schema/flat-union-int-branch.err
    R tests/qapi-schema/flat-union-int-branch.exit
    M tests/qapi-schema/flat-union-invalid-branch-key.err
    R tests/qapi-schema/flat-union-invalid-branch-key.exit
    M tests/qapi-schema/flat-union-invalid-discriminator.err
    R tests/qapi-schema/flat-union-invalid-discriminator.exit
    M tests/qapi-schema/flat-union-invalid-if-discriminator.err
    R tests/qapi-schema/flat-union-invalid-if-discriminator.exit
    M tests/qapi-schema/flat-union-no-base.err
    R tests/qapi-schema/flat-union-no-base.exit
    M tests/qapi-schema/flat-union-optional-discriminator.err
    R tests/qapi-schema/flat-union-optional-discriminator.exit
    M tests/qapi-schema/flat-union-string-discriminator.err
    R tests/qapi-schema/flat-union-string-discriminator.exit
    M tests/qapi-schema/funny-char.err
    R tests/qapi-schema/funny-char.exit
    M tests/qapi-schema/funny-word.err
    R tests/qapi-schema/funny-word.exit
    M tests/qapi-schema/ident-with-escape.err
    R tests/qapi-schema/ident-with-escape.exit
    M tests/qapi-schema/include-before-err.err
    R tests/qapi-schema/include-before-err.exit
    M tests/qapi-schema/include-cycle.err
    R tests/qapi-schema/include-cycle.exit
    M tests/qapi-schema/include-extra-junk.err
    R tests/qapi-schema/include-extra-junk.exit
    M tests/qapi-schema/include-nested-err.err
    R tests/qapi-schema/include-nested-err.exit
    M tests/qapi-schema/include-no-file.err
    R tests/qapi-schema/include-no-file.exit
    M tests/qapi-schema/include-non-file.err
    R tests/qapi-schema/include-non-file.exit
    R tests/qapi-schema/include-repetition.exit
    M tests/qapi-schema/include-self-cycle.err
    R tests/qapi-schema/include-self-cycle.exit
    R tests/qapi-schema/include-simple.exit
    R tests/qapi-schema/indented-expr.exit
    M tests/qapi-schema/indented-expr.out
    M tests/qapi-schema/leading-comma-list.err
    R tests/qapi-schema/leading-comma-list.exit
    M tests/qapi-schema/leading-comma-object.err
    R tests/qapi-schema/leading-comma-object.exit
    M tests/qapi-schema/missing-colon.err
    R tests/qapi-schema/missing-colon.exit
    M tests/qapi-schema/missing-comma-list.err
    R tests/qapi-schema/missing-comma-list.exit
    M tests/qapi-schema/missing-comma-object.err
    R tests/qapi-schema/missing-comma-object.exit
    M tests/qapi-schema/missing-type.err
    R tests/qapi-schema/missing-type.exit
    M tests/qapi-schema/nested-struct-data-invalid-dict.err
    R tests/qapi-schema/nested-struct-data-invalid-dict.exit
    M tests/qapi-schema/nested-struct-data.err
    R tests/qapi-schema/nested-struct-data.exit
    M tests/qapi-schema/non-objects.err
    R tests/qapi-schema/non-objects.exit
    M tests/qapi-schema/oob-test.err
    R tests/qapi-schema/oob-test.exit
    M tests/qapi-schema/pragma-doc-required-crap.err
    R tests/qapi-schema/pragma-doc-required-crap.exit
    M tests/qapi-schema/pragma-extra-junk.err
    R tests/qapi-schema/pragma-extra-junk.exit
    M tests/qapi-schema/pragma-name-case-whitelist-crap.err
    R tests/qapi-schema/pragma-name-case-whitelist-crap.exit
    M tests/qapi-schema/pragma-non-dict.err
    R tests/qapi-schema/pragma-non-dict.exit
    M tests/qapi-schema/pragma-returns-whitelist-crap.err
    R tests/qapi-schema/pragma-returns-whitelist-crap.exit
    M tests/qapi-schema/pragma-unknown.err
    R tests/qapi-schema/pragma-unknown.exit
    R tests/qapi-schema/qapi-schema-test.exit
    M tests/qapi-schema/qapi-schema-test.json
    M tests/qapi-schema/qapi-schema-test.out
    M tests/qapi-schema/quoted-structural-chars.err
    R tests/qapi-schema/quoted-structural-chars.exit
    M tests/qapi-schema/redefined-builtin.err
    R tests/qapi-schema/redefined-builtin.exit
    M tests/qapi-schema/redefined-command.err
    R tests/qapi-schema/redefined-command.exit
    M tests/qapi-schema/redefined-event.err
    R tests/qapi-schema/redefined-event.exit
    M tests/qapi-schema/redefined-type.err
    R tests/qapi-schema/redefined-type.exit
    M tests/qapi-schema/reserved-command-q.err
    R tests/qapi-schema/reserved-command-q.exit
    M tests/qapi-schema/reserved-enum-q.err
    R tests/qapi-schema/reserved-enum-q.exit
    M tests/qapi-schema/reserved-member-has.err
    R tests/qapi-schema/reserved-member-has.exit
    M tests/qapi-schema/reserved-member-q.err
    R tests/qapi-schema/reserved-member-q.exit
    M tests/qapi-schema/reserved-member-u.err
    R tests/qapi-schema/reserved-member-u.exit
    M tests/qapi-schema/reserved-member-underscore.err
    R tests/qapi-schema/reserved-member-underscore.exit
    M tests/qapi-schema/reserved-type-kind.err
    R tests/qapi-schema/reserved-type-kind.exit
    M tests/qapi-schema/reserved-type-list.err
    R tests/qapi-schema/reserved-type-list.exit
    M tests/qapi-schema/returns-alternate.err
    R tests/qapi-schema/returns-alternate.exit
    M tests/qapi-schema/returns-array-bad.err
    R tests/qapi-schema/returns-array-bad.exit
    M tests/qapi-schema/returns-dict.err
    R tests/qapi-schema/returns-dict.exit
    M tests/qapi-schema/returns-unknown.err
    R tests/qapi-schema/returns-unknown.exit
    M tests/qapi-schema/returns-whitelist.err
    R tests/qapi-schema/returns-whitelist.exit
    M tests/qapi-schema/string-code-point-127.err
    R tests/qapi-schema/string-code-point-127.exit
    M tests/qapi-schema/string-code-point-31.err
    R tests/qapi-schema/string-code-point-31.exit
    M tests/qapi-schema/struct-base-clash-deep.err
    R tests/qapi-schema/struct-base-clash-deep.exit
    M tests/qapi-schema/struct-base-clash.err
    R tests/qapi-schema/struct-base-clash.exit
    M tests/qapi-schema/struct-data-invalid.err
    R tests/qapi-schema/struct-data-invalid.exit
    M tests/qapi-schema/struct-member-if-invalid.err
    R tests/qapi-schema/struct-member-if-invalid.exit
    M tests/qapi-schema/struct-member-invalid-dict.err
    R tests/qapi-schema/struct-member-invalid-dict.exit
    M tests/qapi-schema/struct-member-invalid.err
    R tests/qapi-schema/struct-member-invalid.exit
    M tests/qapi-schema/test-qapi.py
    M tests/qapi-schema/trailing-comma-list.err
    R tests/qapi-schema/trailing-comma-list.exit
    M tests/qapi-schema/trailing-comma-object.err
    R tests/qapi-schema/trailing-comma-object.exit
    M tests/qapi-schema/type-bypass-bad-gen.err
    R tests/qapi-schema/type-bypass-bad-gen.exit
    M tests/qapi-schema/unclosed-list.err
    R tests/qapi-schema/unclosed-list.exit
    M tests/qapi-schema/unclosed-object.err
    R tests/qapi-schema/unclosed-object.exit
    M tests/qapi-schema/unclosed-string.err
    R tests/qapi-schema/unclosed-string.exit
    M tests/qapi-schema/union-base-empty.err
    R tests/qapi-schema/union-base-empty.exit
    M tests/qapi-schema/union-base-no-discriminator.err
    R tests/qapi-schema/union-base-no-discriminator.exit
    M tests/qapi-schema/union-branch-case.err
    R tests/qapi-schema/union-branch-case.exit
    M tests/qapi-schema/union-branch-if-invalid.err
    R tests/qapi-schema/union-branch-if-invalid.exit
    M tests/qapi-schema/union-branch-invalid-dict.err
    R tests/qapi-schema/union-branch-invalid-dict.exit
    M tests/qapi-schema/union-clash-branches.err
    R tests/qapi-schema/union-clash-branches.exit
    M tests/qapi-schema/union-empty.err
    R tests/qapi-schema/union-empty.exit
    M tests/qapi-schema/union-invalid-base.err
    R tests/qapi-schema/union-invalid-base.exit
    M tests/qapi-schema/union-optional-branch.err
    R tests/qapi-schema/union-optional-branch.exit
    M tests/qapi-schema/union-unknown.err
    R tests/qapi-schema/union-unknown.exit
    M tests/qapi-schema/unknown-escape.err
    R tests/qapi-schema/unknown-escape.exit
    M tests/qapi-schema/unknown-expr-key.err
    R tests/qapi-schema/unknown-expr-key.exit
    M tests/test-qmp-cmds.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/armbru/tags/pull-qapi-2019-10-22-v3' 
into staging

QAPI patches for 2019-10-22

# gpg: Signature made Tue 22 Oct 2019 15:56:36 BST
# gpg:                using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653
# gpg:                issuer "address@hidden"
# gpg: Good signature from "Markus Armbruster <address@hidden>" [full]
# gpg:                 aka "Markus Armbruster <address@hidden>" [full]
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* remotes/armbru/tags/pull-qapi-2019-10-22-v3:
  qapi: Allow introspecting fix for savevm's cooperation with blockdev
  tests/qapi-schema: Cover feature documentation comments
  tests: qapi: Test 'features' of commands
  qapi: Add feature flags to commands
  tests/qapi-schema: Tidy up test output indentation
  qapi: Clear scripts/qapi/doc.py executable bits again
  qapi: Split up scripts/qapi/common.py
  qapi: Move gen_enum(), gen_enum_lookup() back to qapi/types.py
  qapi: Speed up frontend tests
  qapi: Eliminate accidental global frontend state
  qapi: Store pragma state in QAPISourceInfo, not global state
  qapi: Don't suppress doc generation without pragma doc-required

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/ec97eb6133e2...69717d0f890e



reply via email to

[Prev in Thread] Current Thread [Next in Thread]