From 70d8b30d1fafab8e8702105941ef0abe37947feb Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 21 Jun 2022 14:42:32 +0200 Subject: [PATCH] gh-94052: Don't re-run failed tests with --python option (#94054) (cherry picked from commit 0ff7b996f5d836e63cdaf652c7aa734285261096) --- Lib/test/libregrtest/cmdline.py | 8 ++++++-- Lib/test/libregrtest/main.py | 11 ++++++++++- Lib/test/libregrtest/runtest_mp.py | 4 +--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py index 1ac63af734c412..ebe57920d9185c 100644 --- a/Lib/test/libregrtest/cmdline.py +++ b/Lib/test/libregrtest/cmdline.py @@ -1,5 +1,6 @@ import argparse import os +import shlex import sys from test.support import os_helper @@ -372,8 +373,11 @@ def _parse_args(args, **kwargs): parser.error("-s and -f don't go together!") if ns.use_mp is not None and ns.trace: parser.error("-T and -j don't go together!") - if ns.python is not None and ns.use_mp is None: - parser.error("-p requires -j!") + if ns.python is not None: + if ns.use_mp is None: + parser.error("-p requires -j!") + # The "executable" may be two or more parts, e.g. "node python.js" + ns.python = shlex.split(ns.python) if ns.failfast and not (ns.verbose or ns.verbose3): parser.error("-G/--failfast needs either -v or -W") if ns.pgo and (ns.verbose or ns.verbose2 or ns.verbose3): diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index cc8ba05d39ca7d..655e4d2e56f8f0 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -306,13 +306,22 @@ def list_cases(self): printlist(self.skipped, file=sys.stderr) def rerun_failed_tests(self): + self.log() + + if self.ns.python: + # Temp patch for https://github.com/python/cpython/issues/94052 + self.log( + "Re-running failed tests is not supported with --python " + "host runner option." + ) + return + self.ns.verbose = True self.ns.failfast = False self.ns.verbose3 = False self.first_result = self.get_tests_result() - self.log() self.log("Re-running failed tests in verbose mode") rerun_list = list(self.need_rerun) self.need_rerun.clear() diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py index 71ababd19b876a..6ebabb86873bcb 100644 --- a/Lib/test/libregrtest/runtest_mp.py +++ b/Lib/test/libregrtest/runtest_mp.py @@ -2,7 +2,6 @@ import json import os.path import queue -import shlex import signal import subprocess import sys @@ -59,8 +58,7 @@ def run_test_in_subprocess(testname: str, ns: Namespace, tmp_dir: str) -> subpro worker_args = (ns_dict, testname) worker_args = json.dumps(worker_args) if ns.python is not None: - # The "executable" may be two or more parts, e.g. "node python.js" - executable = shlex.split(ns.python) + executable = ns.python else: executable = [sys.executable] cmd = [*executable, *support.args_from_interpreter_flags(),