From: Kevin Wolf <kwolf@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Daniel P. Berrangé" <berrange@redhat.com>,
qemu-block@nongnu.org, "Kashyap Chamarthy" <kchamart@redhat.com>,
afrosi@redhat.com, "Philippe Mathieu-Daudé" <philmd@redhat.com>,
qemu-devel@nongnu.org, "Stefan Hajnoczi" <stefanha@redhat.com>,
"Laszlo Ersek" <lersek@redhat.com>
Subject: Re: [PATCH 1/4] docs: lift block-core.json rST header into parents
Date: Wed, 9 Sep 2020 17:38:59 +0200 [thread overview]
Message-ID: <20200909153859.GF5219@linux.fritz.box> (raw)
In-Reply-To: <87y2ljt1fi.fsf@dusky.pond.sub.org>
Am 09.09.2020 um 17:28 hat Markus Armbruster geschrieben:
> Kevin Wolf <kwolf@redhat.com> writes:
>
> > Am 09.09.2020 um 14:10 hat Markus Armbruster geschrieben:
> >> Kevin Wolf <kwolf@redhat.com> writes:
> >>
> >> > Am 09.09.2020 um 09:38 hat Markus Armbruster geschrieben:
> >> >> Kevin Wolf <kwolf@redhat.com> writes:
> >> >>
> >> >> > Am 08.09.2020 um 14:03 hat Laszlo Ersek geschrieben:
> >> >> >> Hi Stefan,
> >> >> >>
> >> >> >> On 09/08/20 11:31, Stefan Hajnoczi wrote:
> >> >> >> > block-core.json is included from several places. It has no way of
> >> >> >> > knowing what header level (h1, h2, ...) is appropriate. Sphinx reports
> >> >> >> > errors when it encounters an h2 header where it expects an h1 header.
> >> >> >> > This issue prevents the next patch from generating documentation for
> >> >> >> > qemu-storage-daemon QMP commands.
> >> >> >> >
> >> >> >> > Move the header into parents so that the correct header level can be
> >> >> >> > used. Note that transaction.json is not updated since it doesn't seem to
> >> >> >> > need a header.
> >> >> >> >
> >> >> >> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> >> >> >> > ---
> >> >> >> > docs/interop/firmware.json | 4 ++++
> >> >> >> > qapi/block-core.json | 4 ----
> >> >> >> > qapi/block.json | 1 +
> >> >> >> > 3 files changed, 5 insertions(+), 4 deletions(-)
> >> >> >> >
> >> >> >> > diff --git a/docs/interop/firmware.json b/docs/interop/firmware.json
> >> >> >> > index 989f10b626..48af327f98 100644
> >> >> >> > --- a/docs/interop/firmware.json
> >> >> >> > +++ b/docs/interop/firmware.json
> >> >> >> > @@ -15,6 +15,10 @@
> >> >> >> > ##
> >> >> >> >
> >> >> >> > { 'include' : 'machine.json' }
> >> >> >> > +
> >> >> >> > +##
> >> >> >> > +# == Block devices
> >> >> >> > +##
> >> >> >> > { 'include' : 'block-core.json' }
> >> >> >> >
> >> >> >> > ##
> >> >> >>
> >> >> >> I think "docs/interop/firmware.json" deserves the same treatment as
> >> >> >> "transaction.json".
> >> >> >>
> >> >> >> It's been a long time since I last looked at a rendered view of
> >> >> >> "docs/interop/firmware.json", but it only includes "block-core.json" so
> >> >> >> it can refer to some block-related types (@BlockdevDriver seems like the
> >> >> >> main, or only, one).
> >> >> >>
> >> >> >> I wouldn't expect the rendered view of "firmware.json" to have a section
> >> >> >> header saying "Block devices".
> >> >> >>
> >> >> >> I think it should be fine to drop this hunk (and my CC along with it ;))
> >> >> >
> >> >> > I think this is actually a more general problem with the way we generate
> >> >> > the documentation. For example, the "Background jobs" documentation ends
> >> >> > up under "Block Devices" just because qapi-schema.json includes
> >> >> > block-core.json before job.json and block-core.json includes job.json to
> >> >> > be able to access some types.
> >> >>
> >> >> The doc generator is stupid and greedy (which also makes it
> >> >> predictable): a module's documentation is emitted where it is first
> >> >> included.
> >> >>
> >> >> For full control of the order, have the main module include all
> >> >> sub-modules in the order you want.
> >> >
> >> > This works as long as the order that we want is consistent with the
> >> > requirement that every file must be included by qapi-schea.json before
> >> > it is included by any other file (essentially making the additional
> >> > includes in other files useless).
> >>
> >> These other includes are not useless: they are essential for generating
> >> self-contained headers.
> >>
> >> When MOD.json includes SUBMOD.json, then the generated qapi-FOO-MOD.h
> >> include qapi-FOO-SUBMOD.h. When every module pulls in the modules it
> >> requires, so do the generated headers. When a module doesn't, its
> >> generated headers won't compile unless you manually include the missing
> >> generated headers it requires.
> >
> > Hm, right. So we're using includes for two different purposes, but just
> > from looking at the include line, you can't know which one it is.
>
> Correct. The use for controlling doc order is a bit of a hack.
>
> >> > Is this the order that we want?
> >> >
> >> > If so, we could support following the rule consistently by making double
> >> > include of a file an error.
> >>
> >> Breaks our simple & stupid way to generate self-contained headers.
> >>
> >> >> Alternatively, add just enough includes to get the order you want.
> >> >
> >> > There are orders that I can't get this way.
> >>
> >> You're right, ordering by first include is not completely general.
> >>
> >> > For example, if I want to
> >> > have "Block devices" documented before "Background jobs", there is no
> >> > way to add includes to actually get this order without having
> >> > "Background jobs" as a subsection in "Block devices".
> >>
> >> "Background jobs" is job.json.
> >>
> >> "Block devices" is block.json, which includes block-core.json, which
> >> includes job.json.
> >>
> >> To be able to put "Block devices" first, you'd have to break the chain
> >> from block.json to job.json. Which might even be an improvement:
> >>
> >> $ wc -l qapi/*.json | awk '$1 >= 1000 { print }'
> >> 5527 qapi/block-core.json
> >> 1722 qapi/migration.json
> >> 1617 qapi/misc.json
> >> 1180 qapi/ui.json
> >> 17407 total
> >>
> >> Could we split block-core.json into several cohesive parts?
> >
> > Possibly. However, while it would be an improvement generally speaking,
> > how does this change the specific problem? All of the smaller files will
> > be included by block.json (or whatever file provides the "Block devices"
> > chapter in the documentation) and at least one of them will still have
> > to include job.json.
>
> Splitting block-core.json can help only if other modules then use less
> than all the parts. In particular, as long as block.json includes the
> same stuff, it'll surely still include jobs.json. Could it include
> less?
Not if the documentation wants to have a single chapter for the block
layer instead of many small block related top-level chapters.
Otherwise we could include some things directly from qapi-schema.json,
but obviously, that would still have to be after job.json for some
parts.
Kevin
next prev parent reply other threads:[~2020-09-09 15:39 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-08 9:31 [PATCH 0/4] docs: add qemu-storage-daemon documentation Stefan Hajnoczi
2020-09-08 9:31 ` [PATCH 1/4] docs: lift block-core.json rST header into parents Stefan Hajnoczi
2020-09-08 12:03 ` Laszlo Ersek
2020-09-08 14:23 ` Kevin Wolf
2020-09-09 7:38 ` Markus Armbruster
2020-09-09 7:52 ` Kevin Wolf
2020-09-09 12:10 ` Markus Armbruster
2020-09-09 13:22 ` Kevin Wolf
2020-09-09 15:28 ` Markus Armbruster
2020-09-09 15:38 ` Kevin Wolf [this message]
2020-09-10 5:18 ` Markus Armbruster
2020-09-10 9:18 ` Kevin Wolf
2020-09-09 8:06 ` Kevin Wolf
2020-09-08 9:31 ` [PATCH 2/4] docs: generate qemu-storage-daemon-qmp-ref(7) man page Stefan Hajnoczi
2020-09-08 9:31 ` [PATCH 3/4] docs: add qemu-storage-daemon(1) " Stefan Hajnoczi
2020-09-08 11:42 ` Kashyap Chamarthy
2020-09-08 14:33 ` Kevin Wolf
2020-09-09 8:59 ` Stefan Hajnoczi
2020-09-08 9:31 ` [PATCH 4/4] MAINTAINERS: add Kevin Wolf as storage daemon maintainer Stefan Hajnoczi
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=20200909153859.GF5219@linux.fritz.box \
--to=kwolf@redhat.com \
--cc=afrosi@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=kchamart@redhat.com \
--cc=lersek@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).