[PATCH] qom: Support JSON in user_creatable_parse_str()

Kevin Wolf posted 1 patch 3 years, 1 month ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20210312131921.421023-1-kwolf@redhat.com
Maintainers: Eduardo Habkost <ehabkost@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>
qom/object_interfaces.c | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
[PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Kevin Wolf 3 years, 1 month ago
Support JSON for --object in all tools and in HMP object_add in the same
way as it is supported in qobject_input_visitor_new_str().

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
Based-on: <20210311144811.313451-1-kwolf@redhat.com>

 qom/object_interfaces.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 62d7db7629..f5ea84b6c4 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -295,25 +295,35 @@ static void user_creatable_print_help_from_qdict(QDict *args)
 ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp)
 {
     ERRP_GUARD();
-    QDict *args;
+    QObject *obj;
     bool help;
     Visitor *v;
     ObjectOptions *options;
 
-    args = keyval_parse(optarg, "qom-type", &help, errp);
-    if (*errp) {
-        return NULL;
-    }
-    if (help) {
-        user_creatable_print_help_from_qdict(args);
-        qobject_unref(args);
-        return NULL;
+    if (optarg[0] == '{') {
+        obj = qobject_from_json(optarg, errp);
+        if (!obj) {
+            return NULL;
+        }
+        v = qobject_input_visitor_new(obj);
+    } else {
+        QDict *args = keyval_parse(optarg, "qom-type", &help, errp);
+        if (*errp) {
+            return NULL;
+        }
+        if (help) {
+            user_creatable_print_help_from_qdict(args);
+            qobject_unref(args);
+            return NULL;
+        }
+
+        obj = QOBJECT(args);
+        v = qobject_input_visitor_new_keyval(obj);
     }
 
-    v = qobject_input_visitor_new_keyval(QOBJECT(args));
     visit_type_ObjectOptions(v, NULL, &options, errp);
     visit_free(v);
-    qobject_unref(args);
+    qobject_unref(obj);
 
     return options;
 }
-- 
2.30.2


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Markus Armbruster 3 years, 1 month ago
Is this an alternative to Paolo's "[PATCH 0/3] vl: QAPIfy -object", and
if not, how do the two play together?


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Kevin Wolf 3 years, 1 month ago
Am 12.03.2021 um 17:01 hat Markus Armbruster geschrieben:
> Is this an alternative to Paolo's "[PATCH 0/3] vl: QAPIfy -object", and
> if not, how do the two play together?

Paolo's patch adds JSON support to the system emulator CLI (using
QemuOpts to stay compatible with the list magic), this patch adds it to
everything else (tools don't have memory-backend, and HMP isn't a stable
interface, so they all use the same keyval-based function modified by
this patch).

Kevin


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Markus Armbruster 3 years, 1 month ago
Recommend

    qom: Support JSON in HMP object_add and tools --object

to put the most interesting bit right in "git-log --oneline".

Kevin Wolf <kwolf@redhat.com> writes:

> Support JSON for --object in all tools and in HMP object_add in the same
> way as it is supported in qobject_input_visitor_new_str().
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> Based-on: <20210311144811.313451-1-kwolf@redhat.com>
>
>  qom/object_interfaces.c | 32 +++++++++++++++++++++-----------
>  1 file changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
> index 62d7db7629..f5ea84b6c4 100644
> --- a/qom/object_interfaces.c
> +++ b/qom/object_interfaces.c
> @@ -295,25 +295,35 @@ static void user_creatable_print_help_from_qdict(QDict *args)
>  ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp)
>  {
>      ERRP_GUARD();
> -    QDict *args;
> +    QObject *obj;
>      bool help;
>      Visitor *v;
>      ObjectOptions *options;
>  
> -    args = keyval_parse(optarg, "qom-type", &help, errp);
> -    if (*errp) {
> -        return NULL;
> -    }
> -    if (help) {
> -        user_creatable_print_help_from_qdict(args);
> -        qobject_unref(args);
> -        return NULL;
> +    if (optarg[0] == '{') {
> +        obj = qobject_from_json(optarg, errp);
> +        if (!obj) {
> +            return NULL;
> +        }
> +        v = qobject_input_visitor_new(obj);
> +    } else {
> +        QDict *args = keyval_parse(optarg, "qom-type", &help, errp);
> +        if (*errp) {
> +            return NULL;
> +        }
> +        if (help) {
> +            user_creatable_print_help_from_qdict(args);
> +            qobject_unref(args);
> +            return NULL;
> +        }
> +
> +        obj = QOBJECT(args);
> +        v = qobject_input_visitor_new_keyval(obj);
>      }
>  
> -    v = qobject_input_visitor_new_keyval(QOBJECT(args));
>      visit_type_ObjectOptions(v, NULL, &options, errp);
>      visit_free(v);
> -    qobject_unref(args);
> +    qobject_unref(obj);
>  
>      return options;
>  }

Best viewed with whitespace change ignored:

   diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
   index 2e50698075..93b8878127 100644
   --- a/qom/object_interfaces.c
   +++ b/qom/object_interfaces.c
   @@ -242,12 +242,19 @@ static void user_creatable_print_help_from_qdict(QDict *args)
    ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp)
    {
        ERRP_GUARD();
   -    QDict *args;
   +    QObject *obj;
        bool help;
        Visitor *v;
        ObjectOptions *options;

   -    args = keyval_parse(optarg, "qom-type", &help, errp);
   +    if (optarg[0] == '{') {
   +        obj = qobject_from_json(optarg, errp);
   +        if (!obj) {
   +            return NULL;
   +        }
   +        v = qobject_input_visitor_new(obj);
   +    } else {
   +        QDict *args = keyval_parse(optarg, "qom-type", &help, errp);
            if (*errp) {
                return NULL;
            }
   @@ -257,10 +264,13 @@ ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp)
                return NULL;
            }

   -    v = qobject_input_visitor_new_keyval(QOBJECT(args));
   +        obj = QOBJECT(args);
   +        v = qobject_input_visitor_new_keyval(obj);
   +    }
   +
        visit_type_ObjectOptions(v, NULL, &options, errp);
        visit_free(v);
   -    qobject_unref(args);
   +    qobject_unref(obj);

        return options;
    }

Reviewed-by: Markus Armbruster <armbru@redhat.com>


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Kevin Wolf 3 years, 1 month ago
Am 13.03.2021 um 09:00 hat Markus Armbruster geschrieben:
> Recommend
> 
>     qom: Support JSON in HMP object_add and tools --object
> 
> to put the most interesting bit right in "git-log --oneline".

Makes sense. I've updated my patch locally, but Paolo has already queued
it. Paolo, can you update the subject line accordingly?

Kevin


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Paolo Bonzini 3 years, 1 month ago
On 15/03/21 12:56, Kevin Wolf wrote:
> Am 13.03.2021 um 09:00 hat Markus Armbruster geschrieben:
>> Recommend
>>
>>      qom: Support JSON in HMP object_add and tools --object
>>
>> to put the most interesting bit right in "git-log --oneline".
> 
> Makes sense. I've updated my patch locally, but Paolo has already queued
> it. Paolo, can you update the subject line accordingly?

Ok, done.

Paolo


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Eric Blake 3 years, 1 month ago
On 3/12/21 7:19 AM, Kevin Wolf wrote:
> Support JSON for --object in all tools and in HMP object_add in the same
> way as it is supported in qobject_input_visitor_new_str().
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> Based-on: <20210311144811.313451-1-kwolf@redhat.com>
> 
>  qom/object_interfaces.c | 32 +++++++++++++++++++++-----------
>  1 file changed, 21 insertions(+), 11 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org


Re: [PATCH] qom: Support JSON in user_creatable_parse_str()
Posted by Paolo Bonzini 3 years, 1 month ago
On 12/03/21 14:59, Eric Blake wrote:
> On 3/12/21 7:19 AM, Kevin Wolf wrote:
>> Support JSON for --object in all tools and in HMP object_add in the same
>> way as it is supported in qobject_input_visitor_new_str().
>>
>> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
>> ---
>> Based-on: <20210311144811.313451-1-kwolf@redhat.com>
>>
>>   qom/object_interfaces.c | 32 +++++++++++++++++++++-----------
>>   1 file changed, 21 insertions(+), 11 deletions(-)
>>
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 

Queued, thanks.

Paolo