diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 046f6560a210ad..5b0b3e4422c0dd 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -375,7 +375,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, 'runleaks', 'huntrleaks=', 'memlimit=', 'randseed=', 'multiprocess=', 'slaveargs=', 'forever', 'header', 'pgo', 'failfast', 'match=', 'testdir=', 'list-tests', 'list-cases', - 'coverage', 'matchfile=', 'fail-env-changed']) + 'coverage', 'matchfile=', 'fail-env-changed', 'cleanup']) except getopt.error, msg: usage(2, msg) @@ -388,6 +388,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, list_tests = False list_cases_opt = False fail_env_changed = False + cleanup_tests = False for o, a in opts: if o in ('-h', '--help'): usage(0) @@ -490,6 +491,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, list_cases_opt = True elif o == '--fail-env-changed': fail_env_changed = True + elif o == '--cleanup': + cleanup_tests = True else: print >>sys.stderr, ("No handler for option {}. Please " "report this as a bug at http://bugs.python.org.").format(o) @@ -527,6 +530,22 @@ def main(tests=None, testdir=None, verbose=0, quiet=False, print >>sys.stderr, msg sys.exit(2) + if cleanup_tests: + import glob + + os.chdir(support.SAVEDCWD) + path = os.path.join(TEMPDIR, 'test_python_*') + print("Cleanup %s directory" % TEMPDIR) + for name in glob.glob(path): + if os.path.isdir(name): + print("Remove directory: %s" % name) + support.rmtree(name) + else: + print("Remove file: %s" % name) + support.unlink(name) + sys.exit(0) + + if slaveargs is not None: args, kwargs = json.loads(slaveargs) if testdir: diff --git a/Makefile.pre.in b/Makefile.pre.in index 9297e7fc89c4ad..2a14f3323bc3f4 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -855,6 +855,12 @@ $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS) TESTOPTS= -l $(EXTRATESTOPTS) TESTPROG= $(srcdir)/Lib/test/regrtest.py TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -Wd -3 -E -tt $(TESTPYTHONOPTS) + +# Remove "test_python_*" directories of previous failed test jobs. +# Pass TESTOPTS options because it can contain --tempdir option. +cleantest: build_all + $(TESTPYTHON) $(TESTPROG) $(TESTOPTS) --cleanup + test: @DEF_MAKE_RULE@ platform -find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f -$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) diff --git a/Misc/NEWS.d/next/Tests/2019-06-24-10-47-07.bpo-37359.CkdtyO.rst b/Misc/NEWS.d/next/Tests/2019-06-24-10-47-07.bpo-37359.CkdtyO.rst new file mode 100644 index 00000000000000..3d5350de4f43f7 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-06-24-10-47-07.bpo-37359.CkdtyO.rst @@ -0,0 +1,4 @@ +Add --cleanup option to python3 -m test to remove ``test_python_*`` +directories of previous failed jobs. Add "make cleantest" to run +``python3 -m test --cleanup``. +