Kevin Wolf <kw...@redhat.com> writes:

> Am 18.06.2019 um 11:01 hat Daniel P. Berrangé geschrieben:
>> On Mon, Jun 17, 2019 at 08:49:03PM +0200, Markus Armbruster wrote:
>> > From: Kevin Wolf <kw...@redhat.com>
>> > 
>> > The -mon pretty=on|off switch of the -mon option applies only to QMP
>> > monitors. It's silently ignored for HMP. Deprecate this combination so
>> > that we can make it an error in future versions.
>> 
>> No objection to merging this PR as is, but how about we extend the
>> deprecation to QMP too ?
>> 
>> I was responsible for adding this option back in 2010 and I don't
>> think I've used it since 2012 when I added pretty printing support
>> to scripts/qmp/qmp-shell. I struggle to imagine good reasons for
>> using QMP directly with pretty printing, as opposed to doing it
>> via qmp-shell or another wrapper tool.
>
> qemu-iotests uses it. It doesn't only make the output (and espeically
> diffs on failure) much more readable, but in fact also avoids very long
> lines in the refernce output that used to break patch emails when we
> didn't use pretty printing yet.
>
> So let's keep it for QMP, please.

Perhaps we can get rid of it if we find a suitable filter.

Hmm, Python comes with one: "python -m json.tool".  It expects just one
expression, and fails if anything follows:

    $ printf '{"execute": "qmp_capabilities"}\n{"execute": "query-version"}\n' 
| socat UNIX:/work/armbru/images/test-qmp STDIO | python3 -m json.tool
    Extra data: line 2 column 1 (char 134)

To pretty print a sequence of expressions, you have to wrap a loop
around it:

    $ printf '{"execute": "qmp_capabilities"}\n{"execute": "query-version"}\n' 
| socat UNIX:/work/armbru/images/test-qmp STDIO | { while read line; do echo 
"$line" | python3 -m json.tool; done; }
    {
        "QMP": {
            "version": {
                "qemu": {
                    "micro": 50,
                    "minor": 0,
                    "major": 4
                },
                "package": "v4.0.0-1467-g6385dd6613"
            },
            "capabilities": [
                "oob"
            ]
        }
    }
    {
        "return": {}
    }
    {
        "return": {
            "qemu": {
                "micro": 50,
                "minor": 0,
                "major": 4
            },
            "package": "v4.0.0-1467-g6385dd6613"
        }
    }

I figure we'd want to loop in Python instead of shell.

My point is: pretty-printing is trivial in Python.  The case for
maintaining C code to do it seems weak.

Reply via email to