On Wed, 24 Jun 2026 at 18:03, Branko Čibej <[email protected]> wrote:

> On 24. 6. 2026 16:03, Ivan Zhakov wrote:
>
> On Tue, 23 Jun 2026 at 17:42, Daniel Sahlberg <[email protected]>
> wrote:
>
>> Den tis 23 juni 2026 kl 15:34 skrev <[email protected]>:
>>
>>> Author: ivan
>>> Date: Tue Jun 23 13:33:58 2026
>>> New Revision: 1935586
>>>
>>> Log:
>>> On 'xml-schema-validation-improvements' branch:
>>>
>>> Always use installed lxml and rnc2rng Python packages to validate XML
>>> output
>>> of `svn --xml` in tests.
>>>
>>> This change also makes these package mandatory for running tests unless
>>> new
>>> option `--disable-xml-schema-validation` is specified.
>>>
>>
>> [...]
>>
>> I had a few minutes to spare this afternoon so I checked this commit and
>> did three tests on Ubuntu 26.04:
>> - With python3-lxml install: make check succceeded
>> - Without python3-lxml installed: make check failed  with error messages,
>> this in the summary:
>> [[[
>> There were some XML validation errors,
>> checking/home/dsg/svn_branches/xml-schema-validation-improvements/tests.log
>> XML: Module lxml.etree not found
>> ]]]
>> - Without python3-lxml:  DISABLE_XML_SCHEMA_VALIDATION=true make check
>> succeed.
>>
>> I think this looks good - fails by default but can be made to work.
>>
>> I also tried cmake/ctest but that failed spectacularly with (62 tests
>> failed) or without lxml (61 tests failed!), so I presume something else is
>> wrong.
>>
>> Only thing remaining is to document this. "make check" is only mentioned
>> under "Building from a Tarball". Maybe it deserves a separate section ("D.
>> Running the test suite"). Possibly even restructuring "II. Installation" to
>> separate our three build systems (autoconf/make, vcproj and CMake) and
>> having a separate section on testing under each? Do we do this on the
>> branch or after merging back to trunk?
>>
>>
> Thanks for testing this!
>
> There are a few things that still need to be done:
>
> 1. I learned that we can actually use the builtin Python XML package to
> check the structural validity of XML responses. While this isn't the same
> as fully validating the response against a schema definition, it still lets
> us catch many cases where we produce invalid XML.
>
> In r1935590 I implemented this improvement and I'm now thinking about
> making this mode the default, enabling full schema validation only if
> explicitly requested. This way maintainers that run tests in their
> pipelines can still get an adequate level of checking without being
> required to install additional packages. And we ourselves will enable the
> full validation in GitHub Actions.
>
>
>
> I like this approach, with one small nit – there's no need to explicitly
> request schema validation, just check at runtime if the required modules
> (lxml and rng2rnc) are available and if they are, perform full validation.
> There is/was already code in svntest/main.py to check that.
>
>
Since we now have the always-on XML structural check, I'd say we should
pick between two options:

A) Make full schema validation implicit when the modules are available.
B) Have an explicit `--enable-xml-schema-validation` switch to enable it.

I'm fine with either of these approaches. However, the explicit
`--enable-xml-schema-validation` approach has a couple of advantages:

- It makes test results, such as error messages, predictable and
independent of the environment.
- It gives users a way to check whether their environment is suitable for
full XML schema validation. If a user passes
`--enable-xml-schema-validation` and the modules aren't present, that's an
error rather than a downgrade of the check.

That said, I'm also okay with the implicit approach (A) that you described.

[..]

> 2. On Mac OS, there is an issue where FindPython3() in CMake locates a
> different Python binary that doesn't match `python` from the command line
> [1].
>
> I still need to sort this part out.
>
>
>
> It probably finds /usr/bin/python3 by default, which is Python 3.9 on
> recent versions of macOS. I think you'll have to set the Python3_ROOT_DIR
> hint. Given the python binary you get on the command line, try this:
>
> python3 -c 'import pathlib, sys; 
> print(str(pathlib.Path(sys.executable).resolve().parent.parent))'
>
>
> Haven't tested this yet, but thanks, it looks promising.


-- 
Ivan Zhakov

Reply via email to