Author: brane
Date: Fri May 22 09:50:14 2026
New Revision: 1934497
Log:
Allow the tests to work with a non-standart Python 3 installation that
does not provide the 'venv' module.
* Makefile.in (check): Expose the --python-venv test runner flag through
the PYTHON_VENV make variable.
* subversion/tests/cmdline/svntest/main.py:
Do not require the 'venv' module to be present.
(venv_create): The default value now depends on the presence of 'venv'.
(SVN_TESTS_REQUIRE): Pin the dependency versions.
(SVN_TESTS_DEPEND): New; dependency import module names. Use these
wherever we're checking for module presence as opposed to installing them.
(is_bad_xml_fatal): Fix a silly thinko in the predicaste.
(create_python_venv): Require 'venv' presence.
* subversion/tests/cmdline/log_tests.py
(log_with_merge_history_and_search,
log_xml_with_merge_history): These tests pass the functional part and
fail only when XML validation is enabled because they emit invalid XML.
Update the predicates.
Modified:
subversion/trunk/Makefile.in
subversion/trunk/subversion/tests/cmdline/log_tests.py
subversion/trunk/subversion/tests/cmdline/svntest/main.py
Modified: subversion/trunk/Makefile.in
==============================================================================
--- subversion/trunk/Makefile.in Fri May 22 09:32:54 2026 (r1934496)
+++ subversion/trunk/Makefile.in Fri May 22 09:50:14 2026 (r1934497)
@@ -634,6 +634,9 @@ check: bin @TRANSFORM_LIBTOOL_SCRIPTS@ $
if test "$(SVN_BIN_DIR)" != ""; then \
flags="--bin $(SVN_BIN_DIR) $$flags"; \
fi; \
+ if test "$(PYTHON_VENV)" != ""; then \
+ flags="--python-venv $(PYTHON_VENV) $$flags"; \
+ fi; \
if test "$(STORE_PRISTINE)" != ""; then \
flags="--store-pristine $(STORE_PRISTINE) $$flags"; \
fi; \
Modified: subversion/trunk/subversion/tests/cmdline/log_tests.py
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/log_tests.py Fri May 22 09:32:54 2026 (r1934496)
+++ subversion/trunk/subversion/tests/cmdline/log_tests.py Fri May 22 09:50:14 2026 (r1934497)
@@ -2778,7 +2778,7 @@ def log_on_deleted_deep(sbox):
'',
'-q', '-c', '1-2')
-@XFail()
+@XFail(svntest.main.is_bad_xml_fatal)
@Issue(4711)
def log_with_merge_history_and_search(sbox):
"log --use-merge-history --search"
@@ -2804,7 +2804,7 @@ def log_with_merge_history_and_search(sb
sbox.ospath('A2'))
svntest.verify.validate_xml_schema('log', output)
-@XFail(svntest.main.is_ra_type_file)
+@XFail(svntest.main.is_bad_xml_fatal)
@Issue(4856)
def log_xml_with_merge_history(sbox):
"log --use-merge-history --xml"
Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svntest/main.py Fri May 22 09:32:54 2026 (r1934496)
+++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Fri May 22 09:50:14 2026 (r1934497)
@@ -40,7 +40,13 @@ import importlib
import zipfile
import codecs
import queue
-import venv
+
+# Even though 'venv' is part of the Python3 standard library,
+# some environment don't provide it. The tests do not require it.
+try:
+ import venv
+except ImportError:
+ venv = None
from urllib.parse import quote as urllib_parse_quote
from urllib.parse import unquote as urllib_parse_unquote
@@ -223,13 +229,15 @@ work_dir = "svn-test-work"
# Directory for the Python virtual environment where we install
# external dependencies of the test environment
+venv_create = venv is not None
venv_base = work_dir
-venv_path = lambda: os.path.join(venv_base, "__venv__")
-venv_create = True
+def venv_path():
+ return os.path.join(venv_base, "__venv__")
# List of dependencies
found_dependencies = set()
-SVN_TESTS_REQUIRE = ["lxml", "rnc2rng"]
+SVN_TESTS_REQUIRE = ["lxml==6.1.0", "rnc2rng==2.7.0"] # for pip
+SVN_TESTS_DEPEND = ["lxml", "rnc2rng"] # for install_module
# Constant for the merge info property.
SVN_PROP_MERGEINFO = "svn:mergeinfo"
@@ -1760,7 +1768,8 @@ def is_remote_http_connection_allowed():
def is_bad_xml_fatal():
"""Are we treating invalid XML output as a fatal error?"""
# Only if we have all the necessary dependencies.
- return {'lxml', 'rnc2rnd'} & found_dependencies
+ depends = {'lxml', 'rnc2rng'}
+ return depends == (depends & found_dependencies)
def wc_format(ver=None):
@@ -2462,7 +2471,7 @@ def ensure_dependencies():
saved_sys_path = sys.path[:]
try:
sys.path.insert(0, package_path)
- for package in SVN_TESTS_REQUIRE:
+ for package in SVN_TESTS_DEPEND:
importlib.import_module(package)
found_dependencies.add(package)
have_required = True
@@ -2482,11 +2491,14 @@ def ensure_dependencies():
assert python_path == package_path
if package_path not in sys.path:
sys.path.append(package_path)
- found_dependencies.update(set(SVN_TESTS_REQUIRE))
+ found_dependencies.update(set(SVN_TESTS_DEPEND))
return package_path
return None
def create_python_venv(venv_dir, quiet=False):
+ # We should never get this far if the 'venv' module isn't available.
+ assert venv is not None
+
try:
# Create the virtual environment
if not os.path.isdir(venv_dir):
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.