[PATCH 00/22] qapi: Remove simple unions from the schema language

Markus Armbruster posted 22 patches 2 years, 7 months ago
Test checkpatch failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20210913123932.3306639-1-armbru@redhat.com
Maintainers: Markus Armbruster <armbru@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Eric Blake <eblake@redhat.com>, Stefan Berger <stefanb@linux.vnet.ibm.com>, Eduardo Habkost <ehabkost@redhat.com>, "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>, Michael Roth <michael.roth@amd.com>
There is a newer version of this series
docs/devel/qapi-code-gen.rst                  | 137 ++----
qapi/block-core.json                          |  56 ++-
qapi/char.json                                | 169 ++++++-
qapi/machine.json                             |  42 +-
qapi/sockets.json                             |  46 +-
qapi/tpm.json                                 |  24 +-
qapi/transaction.json                         | 111 ++++-
qapi/ui.json                                  |  72 ++-
backends/tpm/tpm_emulator.c                   |   2 +-
backends/tpm/tpm_passthrough.c                |   2 +-
chardev/char-socket.c                         |   6 +-
chardev/char-udp.c                            |   4 +-
monitor/hmp-cmds.c                            |   8 +-
tests/unit/test-clone-visitor.c               |  98 ++--
tests/unit/test-qmp-cmds.c                    |  18 +-
tests/unit/test-qobject-input-visitor.c       | 460 ++++++------------
tests/unit/test-qobject-output-visitor.c      | 391 ++++-----------
tests/unit/test-yank.c                        |   6 +-
util/qemu-sockets.c                           |   8 +-
scripts/qapi/expr.py                          |  27 +-
scripts/qapi/schema.py                        | 101 +---
tests/qapi-schema/args-union.err              |   2 +-
tests/qapi-schema/args-union.json             |   8 +-
tests/qapi-schema/bad-base.err                |   2 +-
tests/qapi-schema/bad-base.json               |   8 +-
tests/qapi-schema/doc-good.json               |  13 +-
tests/qapi-schema/doc-good.out                |  22 -
tests/qapi-schema/doc-good.txt                |  20 -
tests/qapi-schema/enum-if-invalid.json        |   4 +-
.../qapi-schema/flat-union-array-branch.json  |   2 +-
tests/qapi-schema/flat-union-base-union.err   |   2 +-
tests/qapi-schema/flat-union-base-union.json  |   3 +
tests/qapi-schema/flat-union-empty.json       |   2 +-
tests/qapi-schema/flat-union-int-branch.json  |   2 +-
tests/qapi-schema/flat-union-no-base.err      |   2 +-
tests/qapi-schema/flat-union-no-base.json     |   2 +-
tests/qapi-schema/meson.build                 |   5 -
tests/qapi-schema/qapi-schema-test.json       |  49 +-
tests/qapi-schema/qapi-schema-test.out        | 112 +----
tests/qapi-schema/reserved-member-u.json      |   2 +-
tests/qapi-schema/reserved-type-kind.err      |   2 -
tests/qapi-schema/reserved-type-kind.json     |   2 -
tests/qapi-schema/reserved-type-kind.out      |   0
tests/qapi-schema/union-base-empty.json       |   2 +-
.../union-base-no-discriminator.err           |   2 +-
.../union-base-no-discriminator.json          |   2 +-
tests/qapi-schema/union-branch-case.err       |   2 -
tests/qapi-schema/union-branch-case.json      |   2 -
tests/qapi-schema/union-branch-case.out       |   0
.../qapi-schema/union-branch-invalid-dict.err |   2 +-
.../union-branch-invalid-dict.json            |   4 +
tests/qapi-schema/union-clash-branches.err    |   2 -
tests/qapi-schema/union-clash-branches.json   |   7 -
tests/qapi-schema/union-clash-branches.out    |   0
tests/qapi-schema/union-empty.err             |   2 -
tests/qapi-schema/union-empty.json            |   2 -
tests/qapi-schema/union-empty.out             |   0
tests/qapi-schema/union-optional-branch.err   |   2 -
tests/qapi-schema/union-optional-branch.json  |   2 -
tests/qapi-schema/union-optional-branch.out   |   0
tests/qapi-schema/union-unknown.err           |   2 +-
tests/qapi-schema/union-unknown.json          |   5 +-
62 files changed, 936 insertions(+), 1158 deletions(-)
delete mode 100644 tests/qapi-schema/reserved-type-kind.err
delete mode 100644 tests/qapi-schema/reserved-type-kind.json
delete mode 100644 tests/qapi-schema/reserved-type-kind.out
delete mode 100644 tests/qapi-schema/union-branch-case.err
delete mode 100644 tests/qapi-schema/union-branch-case.json
delete mode 100644 tests/qapi-schema/union-branch-case.out
delete mode 100644 tests/qapi-schema/union-clash-branches.err
delete mode 100644 tests/qapi-schema/union-clash-branches.json
delete mode 100644 tests/qapi-schema/union-clash-branches.out
delete mode 100644 tests/qapi-schema/union-empty.err
delete mode 100644 tests/qapi-schema/union-empty.json
delete mode 100644 tests/qapi-schema/union-empty.out
delete mode 100644 tests/qapi-schema/union-optional-branch.err
delete mode 100644 tests/qapi-schema/union-optional-branch.json
delete mode 100644 tests/qapi-schema/union-optional-branch.out
[PATCH 00/22] qapi: Remove simple unions from the schema language
Posted by Markus Armbruster 2 years, 7 months ago
Simple unions predate flat unions.  Having both complicates the QAPI
schema language and the QAPI generator.  We haven't been using simple
unions in new code for a long time, because they are less flexible and
somewhat awkward on the wire.

Get rid of them.  We should've done this long ago.

This adds some boilerplate to the schema:

    $ git-diff --shortstat master qapi
     7 files changed, 461 insertions(+), 59 deletions(-)

Well worth the language simplification, in my opinion:

    $ git-diff --stat master scripts/ docs/
     docs/devel/qapi-code-gen.rst | 137 ++++++++++---------------------------------
     scripts/qapi/common.py       |  19 ++----
     scripts/qapi/expr.py         |  48 +++++++--------
     scripts/qapi/schema.py       | 101 +++++++------------------------
     4 files changed, 80 insertions(+), 225 deletions(-)

The complete diffstat looks even better, but is somewhat misleading,
because it's dominated by two tests rewritten in a much more compact
way.

This series is based on my "[PULL 0/5] QAPI patches patches for
2021-09-13".

Based-on: <20210913095038.3040776-1-armbru@redhat.com>

Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Hanna Reitz <hreitz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>

Markus Armbruster (22):
  qapi: Tidy up unusual line breaks
  qapi: Stop enforcing "type name should not end in 'Kind'
  qapi: Convert simple union KeyValue to flat one
  qapi: Convert simple union InputEvent to flat one
  qapi: Convert simple union TpmTypeOptions to flat one
  qapi: Convert simple union MemoryDeviceInfo to flat one
  qapi: Convert simple union ChardevBackend to flat one
  qapi: Convert simple union SocketAddressLegacy to flat one
  qapi: Convert simple union ImageInfoSpecific to flat one
  qapi: Convert simple union TransactionAction to flat one
  tests/qapi-schema: Prepare for simple union UserDefListUnion removal
  test-qobject-input-visitor: Wean off UserDefListUnion
  test-qobject-output-visitor: Wean off UserDefListUnion
  test-clone-visitor: Wean off UserDefListUnion
  tests/qapi-schema: Wean off UserDefListUnion
  tests/qapi-schema: Simple union UserDefListUnion is now unused, drop
  tests/qapi-schema: Rewrite simple union TestIfUnion to be flat
  test-clone-visitor: Wean off __org.qemu_x-Union1
  tests/qapi-schema: Drop simple union __org.qemu_x-Union1
  tests/qapi-schema: Purge simple unions from tests
  qapi: Drop simple unions
  test-clone-visitor: Correct an accidental rename

 docs/devel/qapi-code-gen.rst                  | 137 ++----
 qapi/block-core.json                          |  56 ++-
 qapi/char.json                                | 169 ++++++-
 qapi/machine.json                             |  42 +-
 qapi/sockets.json                             |  46 +-
 qapi/tpm.json                                 |  24 +-
 qapi/transaction.json                         | 111 ++++-
 qapi/ui.json                                  |  72 ++-
 backends/tpm/tpm_emulator.c                   |   2 +-
 backends/tpm/tpm_passthrough.c                |   2 +-
 chardev/char-socket.c                         |   6 +-
 chardev/char-udp.c                            |   4 +-
 monitor/hmp-cmds.c                            |   8 +-
 tests/unit/test-clone-visitor.c               |  98 ++--
 tests/unit/test-qmp-cmds.c                    |  18 +-
 tests/unit/test-qobject-input-visitor.c       | 460 ++++++------------
 tests/unit/test-qobject-output-visitor.c      | 391 ++++-----------
 tests/unit/test-yank.c                        |   6 +-
 util/qemu-sockets.c                           |   8 +-
 scripts/qapi/expr.py                          |  27 +-
 scripts/qapi/schema.py                        | 101 +---
 tests/qapi-schema/args-union.err              |   2 +-
 tests/qapi-schema/args-union.json             |   8 +-
 tests/qapi-schema/bad-base.err                |   2 +-
 tests/qapi-schema/bad-base.json               |   8 +-
 tests/qapi-schema/doc-good.json               |  13 +-
 tests/qapi-schema/doc-good.out                |  22 -
 tests/qapi-schema/doc-good.txt                |  20 -
 tests/qapi-schema/enum-if-invalid.json        |   4 +-
 .../qapi-schema/flat-union-array-branch.json  |   2 +-
 tests/qapi-schema/flat-union-base-union.err   |   2 +-
 tests/qapi-schema/flat-union-base-union.json  |   3 +
 tests/qapi-schema/flat-union-empty.json       |   2 +-
 tests/qapi-schema/flat-union-int-branch.json  |   2 +-
 tests/qapi-schema/flat-union-no-base.err      |   2 +-
 tests/qapi-schema/flat-union-no-base.json     |   2 +-
 tests/qapi-schema/meson.build                 |   5 -
 tests/qapi-schema/qapi-schema-test.json       |  49 +-
 tests/qapi-schema/qapi-schema-test.out        | 112 +----
 tests/qapi-schema/reserved-member-u.json      |   2 +-
 tests/qapi-schema/reserved-type-kind.err      |   2 -
 tests/qapi-schema/reserved-type-kind.json     |   2 -
 tests/qapi-schema/reserved-type-kind.out      |   0
 tests/qapi-schema/union-base-empty.json       |   2 +-
 .../union-base-no-discriminator.err           |   2 +-
 .../union-base-no-discriminator.json          |   2 +-
 tests/qapi-schema/union-branch-case.err       |   2 -
 tests/qapi-schema/union-branch-case.json      |   2 -
 tests/qapi-schema/union-branch-case.out       |   0
 .../qapi-schema/union-branch-invalid-dict.err |   2 +-
 .../union-branch-invalid-dict.json            |   4 +
 tests/qapi-schema/union-clash-branches.err    |   2 -
 tests/qapi-schema/union-clash-branches.json   |   7 -
 tests/qapi-schema/union-clash-branches.out    |   0
 tests/qapi-schema/union-empty.err             |   2 -
 tests/qapi-schema/union-empty.json            |   2 -
 tests/qapi-schema/union-empty.out             |   0
 tests/qapi-schema/union-optional-branch.err   |   2 -
 tests/qapi-schema/union-optional-branch.json  |   2 -
 tests/qapi-schema/union-optional-branch.out   |   0
 tests/qapi-schema/union-unknown.err           |   2 +-
 tests/qapi-schema/union-unknown.json          |   5 +-
 62 files changed, 936 insertions(+), 1158 deletions(-)
 delete mode 100644 tests/qapi-schema/reserved-type-kind.err
 delete mode 100644 tests/qapi-schema/reserved-type-kind.json
 delete mode 100644 tests/qapi-schema/reserved-type-kind.out
 delete mode 100644 tests/qapi-schema/union-branch-case.err
 delete mode 100644 tests/qapi-schema/union-branch-case.json
 delete mode 100644 tests/qapi-schema/union-branch-case.out
 delete mode 100644 tests/qapi-schema/union-clash-branches.err
 delete mode 100644 tests/qapi-schema/union-clash-branches.json
 delete mode 100644 tests/qapi-schema/union-clash-branches.out
 delete mode 100644 tests/qapi-schema/union-empty.err
 delete mode 100644 tests/qapi-schema/union-empty.json
 delete mode 100644 tests/qapi-schema/union-empty.out
 delete mode 100644 tests/qapi-schema/union-optional-branch.err
 delete mode 100644 tests/qapi-schema/union-optional-branch.json
 delete mode 100644 tests/qapi-schema/union-optional-branch.out

-- 
2.31.1


Re: [PATCH 00/22] qapi: Remove simple unions from the schema language
Posted by Markus Armbruster 2 years, 7 months ago
Markus Armbruster <armbru@redhat.com> writes:

> Simple unions predate flat unions.  Having both complicates the QAPI
> schema language and the QAPI generator.  We haven't been using simple
> unions in new code for a long time, because they are less flexible and
> somewhat awkward on the wire.
>
> Get rid of them.  We should've done this long ago.
>
> This adds some boilerplate to the schema:
>
>     $ git-diff --shortstat master qapi
>      7 files changed, 461 insertions(+), 59 deletions(-)
>
> Well worth the language simplification, in my opinion:
>
>     $ git-diff --stat master scripts/ docs/
>      docs/devel/qapi-code-gen.rst | 137 ++++++++++---------------------------------
>      scripts/qapi/common.py       |  19 ++----
>      scripts/qapi/expr.py         |  48 +++++++--------
>      scripts/qapi/schema.py       | 101 +++++++------------------------
>      4 files changed, 80 insertions(+), 225 deletions(-)
>
> The complete diffstat looks even better, but is somewhat misleading,
> because it's dominated by two tests rewritten in a much more compact
> way.
>
> This series is based on my "[PULL 0/5] QAPI patches patches for
> 2021-09-13".
>
> Based-on: <20210913095038.3040776-1-armbru@redhat.com>

In master now.