aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2021-10-28 12:25:20 +0200
committerMarkus Armbruster <armbru@redhat.com>2021-10-29 21:28:01 +0200
commit57df0dff1a1f4c846aa74a082bfd595a8a990015 (patch)
treed5953753c4ec81c9f153ea9ce6fe1370b33c7c1b /scripts
parent7ce5fc63c75d0ac756fd0b4d0472774de17f8fec (diff)
qapi: Extend -compat to set policy for unstable interfaces
New option parameters unstable-input and unstable-output set policy for unstable interfaces just like deprecated-input and deprecated-output set policy for deprecated interfaces (see commit 6dd75472d5 "qemu-options: New -compat to set policy for deprecated interfaces"). This is intended for testing users of the management interfaces. It is experimental. For now, this covers only syntactic aspects of QMP, i.e. stuff tagged with feature 'unstable'. We may want to extend it to cover semantic aspects, or the command line. Note that there is no good way for management application to detect presence of these new option parameters: they are not visible output of query-qmp-schema or query-command-line-options. Tolerable, because it's meant for testing. If running with -compat fails, skip the test. Signed-off-by: Markus Armbruster <armbru@redhat.com> Acked-by: John Snow <jsnow@redhat.com> Message-Id: <20211028102520.747396-10-armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> [Doc comments fixed up]
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi/events.py10
-rw-r--r--scripts/qapi/schema.py10
2 files changed, 12 insertions, 8 deletions
diff --git a/scripts/qapi/events.py b/scripts/qapi/events.py
index 82475e84ec..27b44c49f5 100644
--- a/scripts/qapi/events.py
+++ b/scripts/qapi/events.py
@@ -109,13 +109,15 @@ def gen_event_send(name: str,
if not boxed:
ret += gen_param_var(arg_type)
- if 'deprecated' in [f.name for f in features]:
- ret += mcgen('''
+ for f in features:
+ if f.is_special():
+ ret += mcgen('''
- if (compat_policy.deprecated_output == COMPAT_POLICY_OUTPUT_HIDE) {
+ if (compat_policy.%(feat)s_output == COMPAT_POLICY_OUTPUT_HIDE) {
return;
}
-''')
+''',
+ feat=f.name)
ret += mcgen('''
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 55f82d7389..b7b3fc0ce4 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -254,9 +254,11 @@ class QAPISchemaType(QAPISchemaEntity):
def check(self, schema):
QAPISchemaEntity.check(self, schema)
- if 'deprecated' in [f.name for f in self.features]:
- raise QAPISemError(
- self.info, "feature 'deprecated' is not supported for types")
+ for feat in self.features:
+ if feat.is_special():
+ raise QAPISemError(
+ self.info,
+ f"feature '{feat.name}' is not supported for types")
def describe(self):
assert self.meta
@@ -726,7 +728,7 @@ class QAPISchemaFeature(QAPISchemaMember):
role = 'feature'
def is_special(self):
- return self.name in ('deprecated')
+ return self.name in ('deprecated', 'unstable')
class QAPISchemaObjectTypeMember(QAPISchemaMember):