qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 05/11] docs: add qapi texi template


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v2 05/11] docs: add qapi texi template
Date: Tue, 08 Nov 2016 15:04:06 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Marc-André Lureau <address@hidden> writes:

> Hi
>
> ----- Original Message -----
>> Marc-André Lureau <address@hidden> writes:
>> 
>> > The qapi2texi scripts uses a template for the texi file. Since we are
>> > going to generate the documentation in multiple formats, move qmp-intro
>> > to qemu-qapi template. (it would be nice to write something similar for
>> > qemu-ga, but this is left for a future patch)
>> >
>> > Signed-off-by: Marc-André Lureau <address@hidden>
>> 
>> I'm not exactly a Texinfo expert, but I can compare to the Texinfo
>> manual.
>> 
>> Lots of comments below.  Please don't let them discourage you!  Your two
>> manuals are pretty slick already, and a most welcome step forward.
>
> I based it on some older version of qemu-doc.texi. Many of your remarks are 
> also valid for it.

Let's touch it up once this series is in.

>> > ---
>> >  docs/qemu-ga-qapi.template.texi |  58 ++++++++++++++++
>> >  docs/qemu-qapi.template.texi    | 148
>> >  ++++++++++++++++++++++++++++++++++++++++
>> >  docs/qmp-intro.txt              |  87 -----------------------
>> >  3 files changed, 206 insertions(+), 87 deletions(-)
>> >  create mode 100644 docs/qemu-ga-qapi.template.texi
>> >  create mode 100644 docs/qemu-qapi.template.texi
>> >  delete mode 100644 docs/qmp-intro.txt
>> >
>> > diff --git a/docs/qemu-ga-qapi.template.texi
>> > b/docs/qemu-ga-qapi.template.texi
>> > new file mode 100644
>> > index 0000000..3ddbf56
>> > --- /dev/null
>> > +++ b/docs/qemu-ga-qapi.template.texi
>> > @@ -0,0 +1,58 @@
>> > +\input texinfo
>> 
>> The Texinfo manual uses
>> 
>>    \input texinfo   @c -*-texinfo-*-
>> 
>> but my version of Emacs seems to be fine without this.
>
> Shouldn't be necessary imho (in general, I am not fond of modeline unless 
> necessary)
>> 
>> > address@hidden qemu-ga-qapi
>> 
>> Not wrong, but the Texinfo manual recommends to replace the extension
>> (here: .texi) with .info, so let's do that:
>> 
>>    @setfilename qemu-ga-qapi.info
>
> ok
>
>> 
>> > address@hidden en
>> 
>> This overrides the default en_US to just en.  Is that what we want?
>
> let's keep the default
>
>> 
>> > address@hidden 0
>> > address@hidden 0
>> > +
>> > address@hidden QEMU-GA QAPI Reference Manual
>> 
>> What is "QAPI", and why would the reader care?  I think the manual is
>> about the QEMU Guest Agent Protocol.  The fact that its implementation
>> relies on QAPI is immaterial here.  What about:
>> 
>>    @settitle QEMU Guest Agent Protocol Reference
>> 
>> But then the filenames are off.  Rename to qemu-ga-ref.*.
>
> fine by me
>
>> 
>> > +
>> 
>> I think we need a copyright note.  Something like:
>> 
>>    @copying
>>    This is the QEMU Guest Agent QAPI reference manual.
>> 
>>    Copyright @copyright{} 2016 The QEMU Project developers
>> 
>>    @quotation
>>    Permission is granted to ...
>>    @end quotation
>>    @end copying
>> 
>> > address@hidden
>> 
>>    @dircategory QEMU
>
> ok
>
>> Should be added to qemu-doc.texi as well.
>
> I'll leave that for another series
>
>> > address@hidden
>> > +* QEMU-GA-QAPI: (qemu-doc).    QEMU-GA QAPI Reference Manual
>> 
>> Pasto: (qemu-doc)
>> 
>> The description should start at column 32, not 31.
>> 
>> If we retitle and rename as suggested, this becomes:
>> 
>>    * QEMU-GA-Ref: (qemu-ga-ref):   QEMU Guest Agent Protocol Reference
>> 
>
> ok
>
>> > address@hidden direntry
>> > address@hidden ifinfo
>> 
>> Are you sure we need @ifinfo?
>
> Probably not, but it looks more explicit to me that this part is only for 
> .info

I don't think redundant conditionals buy us anything.

>> > +
>> > address@hidden
>> > address@hidden
>> > address@hidden 7
>> > address@hidden @titlefont{{QEMU Guest Agent {version}}}
>> 
>> {version} seems to get replaced by qapi2texi.py.  Worth a comment.
>> 
>
> ok

Peeking at your v3, I see you found a better solution :)

>> > address@hidden 1
>> > address@hidden @titlefont{{QAPI Reference Manual}}
>> 
>> Protocol Reference Manual
>> 
>> > address@hidden 3
>> 
>> Isn't @sp right before @end titlepage redundant?
>
> ok
>
>> 
>> We need to include the copyright notice:
>> 
>>    @page
>>    @vskip 0pt plus 1filll
>>    @insertcopying
>> 
>
> ok
>
>> > address@hidden titlepage
>> > address@hidden iftex
>> 
>> Are you sure we need @iftex?
>
> Same as qemu-doc.texi, I suppose it looks better with info.
>
>> 
>> We can also let Texinfo do the spacing, like this:
>> 
>>    @titlepage
>>    @title QEMU Guest Agent {version}
>>    @subtitle Protocol Reference Manual
>>    @page
>>    @vskip 0pt plus 1filll
>>    @insertcopying
>>    @end titlepage
>> 
>
> That ends up with a different results than qapi-doc, but I also prefer it
>
>> The @title isn't really the title, though.  Could reshuffle things a
>> bit, e.g.
>> 
>>    @title QEMU Guest Agent Protocol Reference Manual
>>    @subtitle for QEMU {version}
>> 
>> Your choice.
>
> Yep, looks good, altough doesn't fit on a single line, I am dropping the 
> leading QEMU
>
>> The examples in Texinfo manual Appendix C "Sample Texinfo Files" have
>> @contents right here, after the title page.
>> 
>
> Ok
>
>> > +
>> > address@hidden
>> > address@hidden Top
>> > address@hidden
>> 
>>    @top QEMU Guest Agent QAPI reference
>> 
>> > +
>> > +This is the QEMU Guest Agent QAPI reference for QEMU {version}.
>> 
>> "protocol reference manual for"
>> 
>> According to the Texinfo manual's examples, the @end ifnottex goes
>> here...
>
> Removing it, now redundant with @copying text
>
>> 
>> > +
>> > address@hidden
>> > +* API Reference::
>> > +* Commands and Events Index::
>> > +* Data Types Index::
>> > address@hidden menu
>> > +
>> > address@hidden ifnottex
>> 
>> ... and not here.
>> 
>
> ok
>
>> > +
>> > address@hidden
>> 
>> Suggest to move this up, as mentioned above.
>> 
>
> ok
>
>> > +
>> > address@hidden API Reference
>> > address@hidden API Reference
>> > +
>> > address@hidden man begin DESCRIPTION
>> 
>> What does this @c man magic do?  Suggest to explain in a comment.
>
> It's for texi2pod, I'll add a comment
>> 
>> > +{qapi}
>> 
>> This seems to get replaced with the generated reference documentation by
>> qapi2texi.py.  Worth a comment.
>
> ok
>
>> 
>> > address@hidden man end
>> > +
>> > address@hidden man begin SEEALSO
>> > +The HTML documentation of QEMU for more precise information.
>> > address@hidden man end
>> 
>> More @c man magic.
>> 
>> > +
>> > address@hidden Commands and Events Index
>> > address@hidden Commands and Events Index
>> > address@hidden fn
>> 
>> Blank line here, please.
>> 
>
> ok
>
>> > address@hidden Data Types Index
>> > address@hidden Data Types Index
>> > address@hidden tp
>> 
>> And here.
>
> ok
>
>> 
>> > address@hidden
>> > diff --git a/docs/qemu-qapi.template.texi b/docs/qemu-qapi.template.texi
>> > new file mode 100644
>> > index 0000000..102c8d9
>> > --- /dev/null
>> > +++ b/docs/qemu-qapi.template.texi
>> 
>> The comments above largely apply; I won't repeat them.
>> 
>> > @@ -0,0 +1,148 @@
>> > +\input texinfo
>> > address@hidden qemu-qapi
>> > address@hidden en
>> > address@hidden 0
>> > address@hidden 0
>> > +
>> > address@hidden QEMU QAPI Reference Manual
>> 
>> Again, QAPI is detail; it's the QEMU QMP reference manual.  Except it
>> has more than just QMP, because we choose to use qapi-schema.json for
>> purely internal types in addition to QMP.
>> 
>> Options:
>> 
>> * Claim this is the QMP reference manual, include the internal types
>>   anyway.
>> 
>> * Filter out the internal types automatically, similar to
>>   qmp-introspect.py.
>> 
>> * Filter out the internal types manually, by annotating them in the
>>   schema.  Feels error-prone.
>> 
>> * Split the QAPI schema.
>> 
>> * Reflect the curious mix of QMP protocol and internal data type
>>   reference in the title.
>> 
>> We don't need a perfect solution to commit this, but an understanding of
>> what we want to do would be nice.
>
> What are the internal types? How is it filtered?

We define several types in the QAPI schema that are used only
internally.  Useful trick to see what's external:

    $ python -B scripts/qapi-introspect.py -cu -p scratch- qapi-schema.json

This generates scratch-qmp-introspect.c describing the external QMP
interface with unmasked type names (-u).  Anything not mentioned there
is not externally visible.

To see how qapi-introspect.py finds the externally visible part of the
schema, search it for _use_type.

>> > +
>> > address@hidden
>> > address@hidden
>> > +* QEMU: (qemu-doc).    QEMU QAPI Reference Manual
>> > address@hidden direntry
>> > address@hidden ifinfo
>> > +
>> > address@hidden
>> > address@hidden
>> > address@hidden 7
>> > address@hidden @titlefont{{QEMU Emulator {version}}}
>> > address@hidden 1
>> > address@hidden @titlefont{{QAPI Reference Manual}}
>> > address@hidden 3
>> > address@hidden titlepage
>> > address@hidden iftex
>> > +
>> > address@hidden
>> > address@hidden Top
>> > address@hidden
>> > +
>> > +This is the QMP QAPI reference for QEMU {version}.
>> > +
>> > address@hidden
>> > +* Introduction::
>> > +* API Reference::
>> > +* Commands and Events Index::
>> > +* Data Types Index::
>> > address@hidden menu
>> > +
>> > address@hidden ifnottex
>> > +
>> > address@hidden
>> > +
>> > address@hidden Introduction
>> > address@hidden Introduction
>> > +
>> > +The QEMU Machine Protocol (@acronym{{QMP}}) allows applications to
>> > +operate a QEMU instance.
>> > +
>> > +QMP is @uref{{http://www.json.org, JSON}} based and features the
>> > +following:
>> > +
>> > address@hidden @minus
>> 
>> @bullet is more common.  Matter of taste.
>
> ok
>
>> 
>> > address@hidden
>> > +Lightweight, text-based, easy to parse data format
>> 
>> Suggest "plain text" instead of "text-based".
>
> ok
>
>> 
>> JSON is "easy to parse" until you hit the potholes in its specification.
>> See "Parsing JSON is a Minefield" <http://seriot.ch/parsing_json.html>.
>> 
>>    QMP provides the following features:
>> 
>>    @itemize @bullet
>>    @item
>>    Simple @uref{{http://www.json.org, JSON}} syntax
>> 
>> > address@hidden
>> > +Asynchronous messages support (ie. events)
>> 
>> i.e.
>> 
>> But I'd say
>> 
>>    @item
>>    Synchronous commands and replies
>>    @item
>>    Asynchronous messages ("events")
>> 
>> > address@hidden
>> > +Capabilities Negotiation
>> 
>> I'd add
>> 
>>    @item
>>    Introspection
>> 
>> > address@hidden itemize
>> > +
>> > +For detailed information on QEMU Machine Protocol, the specification
>> > +is in @file{{qmp-spec.txt}}.
>> > +
>> > address@hidden Usage
>> > +
>> > +You can use the @option{{-qmp}} option to enable QMP. For example, the
>> > +following makes QMP available on localhost port 4444:
>> > +
>> > address@hidden
>> > +$ qemu [...] -qmp tcp:localhost:4444,server,nowait
>> > address@hidden example
>> > +
>> > +However, for more flexibility and to make use of more options, the
>> > address@hidden command-line option should be used. For instance, the
>> > +following example creates one HMP instance (human monitor) on stdio
>> > +and one QMP instance on localhost port 4444:
>> 
>> This sounds a bit like we don't want people to use -qmp.  What about
>> 
>>    However, for more flexibility and to make use of more options, the
>>    @option{{-mon}} command-line option should be used. For instance, the
>>    following example creates one HMP instance (human monitor) on stdio
>>    and one QMP instance on localhost port 4444:
>>    
>> 
>> > +
>> > address@hidden
>> > +$ qemu [...] -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline \
>> > +             -chardev
>> > socket,id=mon1,host=localhost,port=4444,server,nowait \
>> > +             -mon chardev=mon1,mode=control,pretty=on
>> > address@hidden example
>> 
>> Not sure we want to drag in HMP here.
>> 
>> > +
>> > +Please, refer to QEMU's manpage for more information.
>> 
>> Drop the comma.
>> 
>> Hrmmm, I just realized this is merely moved from qmp-intro.txt.  I guess
>> I should read your commit message before your patch %-)
>> 
>> I'm not sure a *reference* manual is a good home for an *introduction*
>> to use.  It's certainly not where I'd look first.
>> 
>> We can decide this isn't a reference manual after all, and change title,
>> file name and so forth accordingly.
>> 
>> Or we can stick to the reference manual idea, and include qmp-intro.txt
>> by reference.
>
> Imho it would be nice to include qmp-intro in the document, has there are 
> more chances it gets read, be it online in html/pdf for, or with the info/man 
> pages.

Replacing qmp-commands.txt by a QMP reference manual is a
straightforward task: we don't have to worry about scope or structure,
only about not losing valuable contents.

But as soon you draw in qmp-intro.txt, we're making a QMP manual.
That's a more complex task, posing additional questions.  For starters,
why is qmp-spec.txt not part of it?  Should the QGA manual get similar
contents?

I'm not saying that task should not be tackled.  But let's control this
series' scope, and make just a QMP reference manual.  We can expand it
into a QMP manual with a reference part later if we like.

> Any suggestion for the the naming? (tbh, I don't mind it being called 
> reference manual or not, even if it includes that text).

We could call it "QMP User Manual".



reply via email to

[Prev in Thread] Current Thread [Next in Thread]