bpo-37359: Add --cleanup option to python3 -m test (GH-14332)
* regrtest: Add --cleanup option to remove "test_python_*" directories
of previous failed test jobs.
* Add "make cleantest" to run "python3 -m test --cleanup".
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index a9b2b35..98b4420 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -173,7 +173,19 @@
# Strip .py extensions.
removepy(ns.args)
- return ns
+ if ns.huntrleaks:
+ warmup, repetitions, _ = ns.huntrleaks
+ if warmup < 1 or repetitions < 1:
+ msg = ("Invalid values for the --huntrleaks/-R parameters. The "
+ "number of warmups and repetitions must be at least 1 "
+ "each (1:1).")
+ print(msg, file=sys.stderr, flush=True)
+ sys.exit(2)
+
+ if ns.tempdir:
+ ns.tempdir = os.path.expanduser(ns.tempdir)
+
+ self.ns = ns
def find_tests(self, tests):
self.tests = tests
@@ -537,7 +549,7 @@
for s in ET.tostringlist(root):
f.write(s)
- def create_temp_dir(self):
+ def set_temp_dir(self):
if self.ns.tempdir:
self.tmp_dir = self.ns.tempdir
@@ -558,6 +570,8 @@
self.tmp_dir = tempfile.gettempdir()
self.tmp_dir = os.path.abspath(self.tmp_dir)
+
+ def create_temp_dir(self):
os.makedirs(self.tmp_dir, exist_ok=True)
# Define a writable temp dir that will be used as cwd while running
@@ -565,14 +579,34 @@
# testing (see the -j option).
pid = os.getpid()
if self.worker_test_name is not None:
- test_cwd = 'worker_{}'.format(pid)
+ test_cwd = 'test_python_worker_{}'.format(pid)
else:
test_cwd = 'test_python_{}'.format(pid)
test_cwd = os.path.join(self.tmp_dir, test_cwd)
return test_cwd
+ def cleanup(self):
+ import glob
+ import shutil
+
+ path = os.path.join(self.tmp_dir, 'test_python_*')
+ print("Cleanup %s directory" % self.tmp_dir)
+ for name in glob.glob(path):
+ print("Remove directory: %s" % name)
+ if os.path.isdir(name):
+ support.rmtree(name)
+ else:
+ print("Remove file: %s" % name)
+ support.unlink(name)
+
def main(self, tests=None, **kwargs):
- self.ns = self.parse_args(kwargs)
+ self.parse_args(kwargs)
+
+ self.set_temp_dir()
+
+ if self.ns.cleanup:
+ self.cleanup()
+ sys.exit(0)
test_cwd = self.create_temp_dir()
@@ -597,15 +631,6 @@
return None
def _main(self, tests, kwargs):
- if self.ns.huntrleaks:
- warmup, repetitions, _ = self.ns.huntrleaks
- if warmup < 1 or repetitions < 1:
- msg = ("Invalid values for the --huntrleaks/-R parameters. The "
- "number of warmups and repetitions must be at least 1 "
- "each (1:1).")
- print(msg, file=sys.stderr, flush=True)
- sys.exit(2)
-
if self.worker_test_name is not None:
from test.libregrtest.runtest_mp import run_tests_worker
run_tests_worker(self.ns, self.worker_test_name)