Am 19.06.2019 um 08:42 hat Markus Armbruster geschrieben:
> 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; }

Yes, it's doable. It's not a very nice command line, but it does its
job.

What do we win by removing pretty printing from qemu? We invest some
work doing the patches, reviewing them, etc. and save the whole
complexity of adding a few newlines and spaces to an already existing
string buffer in a single place (qjson.c).

In exchange, we have to add the above overlong command line to every
qemu-iotests case for which pretty printed QMP is useful, and lose the
ability to just do -qmp-pretty stdio manually (which I do every now and
then) instead of having to dig up the above line in some script to copy
it.

It doesn't look like a net win to me.

> 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.

The pretty printing is fairly trivial in C, too, when you already
generate JSON. The code seems to have been last touched in 2014, and
before that in 2010 when it was introduced. The maintenance burden
doesn't seem to be that bad.

Removing features that have users can be justified sometimes, but it
does need a justification, in my opinion.

Kevin

Reply via email to