All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Peter Krempa <pkrempa@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] Non-flat command line option argument syntax
Date: Fri, 03 Feb 2017 14:53:48 +0100	[thread overview]
Message-ID: <87inorl6s3.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20170203123754.GC1528@andariel.pipo.sk> (Peter Krempa's message of "Fri, 3 Feb 2017 13:37:54 +0100")

Peter Krempa <pkrempa@redhat.com> writes:

> On Thu, Feb 02, 2017 at 20:42:33 +0100, Markus Armbruster wrote:
>
> [...]
>
>> === Comparison ===
>> 
>> In my opinion, dotted keys are weird and ugly, but at least they don't
>> add to the quoting mess.  Structured values look better, except when
>> they do add to the quoting mess.
>
> From libvirt's point of view anything that can be easily generated from
> the JSON representation into command line arguments is acceptable.
> Neither uglyness, nor escaping worry us that much. Libvirt users usually
> don't come into contact with the command line and if they do it's messy
> anyways.

Generating JSON should be pretty much as simple as it gets then.

Even quoting for shell is easy: enclose in "'", taking care to quote "'"
in the JSON text.  Since "'" can only occur in JSON strings, you can
simply replace it by \u0027.  Of course you can also replace by '"'"',
trading legibility for not having to exploit "can only occur in
strings".

>> I'm having a hard time deciding which one I like less :)
>
> I don't like plain JSON. On the other hand I like the dotted syntax ...
> mostly as I've already written the convertors for it a while ago :) [1]

Heh!

I'd certainly go with JSON once that works, to minimize differences with
QMP, execute less code (= fewer bugs), and because I find it more
legible than dotted keys.

> Currently we already to that with anything '-object' related that we do
> in libvirt (memory backing objects, master encryption key, etc) and for
> a few certain network disk backing protocols:
>
> I stole this example above:
>
> We already generate this internally:
>     '{ "file": {
>        "driver": "gluster", "volume": "testvol",
>        "path": "/path/a.qcow2", "debug": 9,
>        "server": [ { "type": "tcp",
>                      "host": "1.2.3.4", "port": "24007"},
>                    { "type": "unix",
>                      "socket": "/var/run/glusterd.socket" } ] } }'
>
> And convert it to this:
>>     -drive driver=qcow2,file.driver=gluster,
>>            file.volume=testvol,file.path=/path/a.qcow2,file.debug=9,
>>            file.server.0.type=tcp,
>>            file.server.0.host=1.2.3.4,
>>            file.server.0.port=24007,
>>            file.server.1.type=unix,
>>            file.server.1.socket=/var/run/glusterd.socket
>
> There are unfortunately two implementations of the array generator:
> For -object we use the repeated key method, and for gluster we use the
> numbered method. It might be due to the fact that I tried to do bitmap
> to array conversion, where the bitmap is represented by a list of
> ranges. It was necessary for memory hotplug

Two array generators isn't so bad considering we have three and a half
ways to do arrays/lists with QemuOpts.

> [1] 331b2583ec2928b in libvirt introduces the first generator (2015/01)
>     b7eef33df20dc19 adds the numbered array methot so that it can be
>                     uset with gluster (2016/07)

  reply	other threads:[~2017-02-03 13:54 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-02 19:42 [Qemu-devel] Non-flat command line option argument syntax Markus Armbruster
2017-02-02 20:06 ` Eric Blake
2017-02-02 20:23 ` Eric Blake
2017-02-03  7:57   ` Markus Armbruster
2017-02-02 20:27 ` Dr. David Alan Gilbert
2017-02-03  7:50   ` Markus Armbruster
2017-02-03 16:57     ` Dr. David Alan Gilbert
2017-02-04  9:44       ` Markus Armbruster
2017-02-06 10:20         ` Dr. David Alan Gilbert
2017-02-03 20:02     ` [Qemu-devel] [Qemu-block] " Max Reitz
2017-02-04  9:45       ` Markus Armbruster
2017-02-04 10:03         ` [Qemu-devel] " Paolo Bonzini
2017-02-04 11:52           ` Markus Armbruster
2017-02-04 12:43             ` Paolo Bonzini
2017-02-03 10:03 ` Daniel P. Berrange
2017-02-03 11:13   ` Markus Armbruster
2017-02-03 12:37 ` Peter Krempa
2017-02-03 13:53   ` Markus Armbruster [this message]
2017-02-03 17:25 ` Richard W.M. Jones
2017-02-04  9:51   ` Markus Armbruster
2017-02-05 20:46     ` [Qemu-devel] [Qemu-block] " Max Reitz
2017-02-03 20:28 ` Max Reitz
2017-02-04  9:56   ` Markus Armbruster
2017-02-04 12:21 ` [Qemu-devel] " Fam Zheng
2017-02-04 12:44   ` Paolo Bonzini
2017-02-04 13:02     ` Fam Zheng
2017-02-04 13:35   ` Markus Armbruster
2017-02-04 14:10     ` Fam Zheng
2017-02-06  6:24       ` Markus Armbruster
2017-02-06 11:08   ` Daniel P. Berrange
2017-02-06  6:57 ` Markus Armbruster
2017-02-06 13:23 ` Kevin Wolf
2017-02-06 15:36   ` Markus Armbruster
2017-02-06 16:33     ` Daniel P. Berrange
2017-02-06 17:24       ` Markus Armbruster
2017-02-06 17:50         ` Daniel P. Berrange
2017-02-06 18:56           ` Markus Armbruster
2017-02-06 17:38     ` Paolo Bonzini
2017-02-06 18:12       ` Markus Armbruster
2017-02-06 21:52         ` Paolo Bonzini
2017-02-07  7:02           ` Markus Armbruster
2017-02-07  9:26     ` Kevin Wolf
2017-02-24 16:04 ` Markus Armbruster
2017-02-24 16:39   ` Daniel P. Berrange
2017-02-24 17:17     ` Eric Blake
2017-02-24 19:15       ` Markus Armbruster
2017-02-27 10:27 ` Markus Armbruster
2017-02-27 10:59   ` Kevin Wolf
2017-02-27 13:36     ` Markus Armbruster
2017-02-27 19:47       ` Eric Blake
2017-02-28  8:24         ` Markus Armbruster
2017-02-27 19:43   ` Eric Blake
2017-02-28  8:41     ` Markus Armbruster
2017-03-01  9:24 ` Markus Armbruster
2017-03-21  8:40 ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87inorl6s3.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pkrempa@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.