On Sat, Sep 07, 2019 at 05:07:46PM +0000, brian m. carlson wrote:
> Our documentation toolchain has traditionally been built around DocBook
> 4.5. This version of DocBook is the last DTD-based version of DocBook.
> In 2009, DocBook 5 was introduced using namespaces and its syntax is
> expressed in RELAX-NG, which is more expressive and allows a wider
> variety of syntax forms.
>
> Asciidoctor, one of the alternatives for building our documentation,
> dropped support for DocBook 4.5 in its recent 2.0 release and now only
> supports DocBook 5. This would not be a problem but for the fact that
> we use xmlto, which is still stuck in the DocBook 4.5 era.
>
> xmlto performs DTD validation as part of the build process. This is not
> problematic for DocBook 4.5, which has a valid DTD, but it clearly
> cannot work for DocBook 5, since no DTD can adequately express its full
> syntax. In addition, even if xmlto did support RELAX-NG validation,
> that wouldn't be sufficient because it uses the libxml2-based xmllint to
> do so, which has known problems with validating interleaves in RELAX-NG.
>
> Fortunately, there's an easy way forward: ask Asciidoctor to use its
> DocBook 5 backend and tell xmlto to skip validation. Asciidoctor has
> supported DocBook 5 since v0.1.4 in 2013 and xmlto has supported
> skipping validation for probably longer than that.
>
> xmlto will still use the non-namespaced DocBook XSL stylesheets (which
> are designed for DocBook 4.5) for building the documentation instead of
> the namespaced ones (which are designed for DocBook 5). This isn't
> really a problem, since both forms are built from the same source and
> can handle both versions, but it does mean that an ugly message about
> the stylesheets stripping the namespace will be printed to standard
> error.
These messages from 'xmlto' look like these, and there are a lot of
them:
Note: namesp. cut : stripped namespace before processing Git User Manual
Note: namesp. cut : stripped namespace before processing git-sh-setup(1)
Note: namesp. cut : stripped namespace before processing
git-get-tar-commit-id(1)
Unfortunately, these messages to standard error cause our CI builds to
fail [1].
In the Documentation build job we check that there was nothing printed
to standard error during 'make doc', in order to catch warnings that
are potential signs of a mis-rendered documentation, but do not cause
any asciidoc/asciidoctor/xmlto commands (and thus 'make doc') to fail.
Now, a few recent messages to standard error that indeed were signs of
mis-rendered docs [2] looked like this:
asciidoctor: WARNING: api-config.txt: line 232: unterminated listing block
i.e. they came from Asciidoctor and were all-caps warnings.
OTOH, these "stripped namespace" messages come from 'xmlto', are not
warnings but have that "Note:" prefix, and, trusting that you did
check the results thoroughly, are apparently not a sign of any
rendering issues. So I think it's safe to ignore them and this patch
should strip them from 'make doc's output in
'ci/test-documentation.sh'.
Related: after this patch we might want to update the CI builds to use
Asciidoctor 2 instead of sticking with 1.5.8.
[1] With Asciidoctor 1.5.8:
https://travis-ci.org/szeder/git/jobs/582294090#L2085
With an additional patch on top to use Asciidoctor 2:
https://travis-ci.org/szeder/git/jobs/582294243#L2066
[2] See 'git log -3 b373e4d29b'