Would this be helpful? (see the patch in the attachments)
-- Timofei Zhakov
Index: build/run_tests.py =================================================================== --- build/run_tests.py (revision 1925818) +++ build/run_tests.py (working copy) @@ -315,6 +315,8 @@ cmdline.append('--valgrind=%s' % self.opts.valgrind) if self.opts.valgrind_opts is not None: cmdline.append('--valgrind-opts=%s' % self.opts.valgrind_opts) + if self.opts.verify_xml_schemas: + cmdline.append('--verify-xml-schemas') self.py_test_cmdline = cmdline @@ -326,16 +328,8 @@ global svntest svntest = importlib.import_module('svntest') - extra_packages = svntest.main.ensure_dependencies() svntest.main.parse_options(cmdline, optparse.SUPPRESS_USAGE) svntest.testcase.TextColors.disable() - - # We have to update PYTHONPATH, otherwise the whole setting up of a - # virtualenv and installing dependencies will happen for every test case. - python_path = os.environ.get("PYTHONPATH") - python_path = (extra_packages if not python_path - else "%s:%s" % (extra_packages, python_path)) - os.environ["PYTHONPATH"] = python_path finally: os.chdir(old_cwd) @@ -1091,6 +1085,8 @@ help='programs to run under valgrind') parser.add_option('--valgrind-opts', action='store', help='options to pass valgrind') + parser.add_option('--verify-xml-schemas', action='store_true', + help='test Relax NG shemas (requrires lxml)') parser.set_defaults(set_log_level=None) return parser Index: subversion/tests/cmdline/svntest/actions.py =================================================================== --- subversion/tests/cmdline/svntest/actions.py (revision 1925818) +++ subversion/tests/cmdline/svntest/actions.py (working copy) @@ -331,7 +331,7 @@ and validates it against the schema for the given command""" exit_code, out, err = run_and_verify_svn(expected_stdout, expected_stderr, command, *varargs) - if exit_code == 0: + if exit_code == 0 and svntest.main.options.verify_xml_schemas: verify.validate_xml_schema(command, out) return exit_code, out, err @@ -355,7 +355,7 @@ and validates it against the schema for the given command""" exit_code, out, err = run_and_verify_svn2(expected_stdout, expected_stderr, expected_exit, command, *varargs) - if exit_code == 0: + if exit_code == 0 and svntest.main.options.verify_xml_schemas: verify.validate_xml_schema(command, out) return exit_code, out, err Index: subversion/tests/cmdline/svntest/main.py =================================================================== --- subversion/tests/cmdline/svntest/main.py (revision 1925818) +++ subversion/tests/cmdline/svntest/main.py (working copy) @@ -39,7 +39,6 @@ import zipfile import codecs import queue -import venv from urllib.parse import quote as urllib_parse_quote from urllib.parse import unquote as urllib_parse_unquote @@ -120,13 +119,11 @@ if sys.platform == 'win32': windows = True file_scheme_prefix = 'file:///' - venv_bin = 'Scripts' _exe = '.exe' _bat = '.bat' os.environ['SVN_DBG_STACKTRACES_TO_STDERR'] = 'y' else: windows = False - venv_bin = 'bin' file_scheme_prefix = 'file://' _exe = '' _bat = '' @@ -173,7 +170,7 @@ def P(relpath, head=os.path.dirname(os.path.dirname(os.path.abspath('.'))) ): - if windows: + if sys.platform=='win32': return os.path.join(head, relpath + '.exe') else: return os.path.join(head, relpath) @@ -220,14 +217,6 @@ # this dir, so there's one point at which to mount, e.g., a ramdisk. work_dir = "svn-test-work" -# Directory for the Python virtual environment where we install -# external dependencies of the test environment -venv_dir = os.path.join(work_dir, "__venv__") - -# List of dependencies -SVN_TESTS_REQUIRE = ["lxml", "rnc2rng"] -dependencies_ensured = False - # Constant for the merge info property. SVN_PROP_MERGEINFO = "svn:mergeinfo" @@ -870,7 +859,7 @@ exit_code, stdout_lines, stderr_lines = \ run_command(svnadmin_binary, 1, use_binary, *varargs) - if use_binary and windows: + if use_binary and sys.platform == 'win32': # Callers don't expect binary output on stderr stderr_lines = [x.replace('\r', '') for x in stderr_lines] @@ -1862,6 +1851,8 @@ args.append('--valgrind=' + options.valgrind) if options.valgrind_opts: args.append('--valgrind-opts=' + options.valgrind_opts) + if options.verify_xml_schemas: + args.append('--verify-xml-schemas') result, stdout_lines, stderr_lines = spawn_process(command, 0, False, None, *args) @@ -2306,6 +2297,8 @@ help='programs to run under valgrind') parser.add_option('--valgrind-opts', action='store', help='options to pass to valgrind') + parser.add_option('--verify-xml-schemas', action='store_true', + help='test Relax NG shemas (requrires lxml)') # most of the defaults are None, but some are other values, set them here parser.set_defaults( @@ -2417,50 +2410,8 @@ appropriate exit code. """ - ensure_dependencies() sys.exit(execute_tests(test_list, serial_only)) -def ensure_dependencies(): - """Install the dependencies we need for running the tests. - - NOTE: this function des not handle the case where the Python - version has changed. In theory, we could automagically - upgrade the venv in that case. In practice, we won't. - """ - - global dependencies_ensured - if dependencies_ensured: - return - - package_path = os.path.join(venv_dir, "lib", - "python%d.%d" % sys.version_info[:2], - "site-packages") - package_path = os.path.abspath(package_path) - if package_path in sys.path: - dependencies_ensured = True - return - - try: - # Create the virtual environment - if not os.path.isdir(venv_dir): - if os.path.exists(venv_dir): - safe_rmtree(venv_dir) - venv.create(venv_dir, with_pip=True) - - # Install any (new) dependencies - pip = os.path.join(venv_dir, venv_bin, "pip"+_exe) - pip_options = ("--disable-pip-version-check", "--require-virtualenv") - subprocess.run([pip, *pip_options, "install", *SVN_TESTS_REQUIRE], - check=True) - - sys.path.append(package_path) - dependencies_ensured = True - return package_path - except Exception as ex: - print("WARNING: Could not install test dependencies," - " some tests will be skipped", file=sys.stderr) - print(ex, file=sys.stderr) - def get_issue_details(issue_numbers): """For each issue number in ISSUE_NUMBERS query the issue tracker and determine what the target milestone is and