A lot of unittests currently leak content in /tmp when they run. Rather than explicitly track down every failing test (which we can do regardless of this), have the runtest runner create a global tempdir and use that as a base for children tests. Then when the runtest script finishes, it takes care of nuking everything. --- v2 - make tempdir setup more robust per Zac
runtests | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/runtests b/runtests index 36243c6..89c6e14 100755 --- a/runtests +++ b/runtests @@ -15,8 +15,10 @@ from __future__ import print_function import argparse import os -import sys +import shutil import subprocess +import sys +import tempfile # These are the versions we fully support and require to pass tests. @@ -91,6 +93,8 @@ $ %(prog)s pym/portage/tests/xpak/test_decodeint.py description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, epilog=epilog) + parser.add_argument('--keep-temp', default=False, action='store_true', + help='Do not delete the temporary directory when exiting') parser.add_argument('--color', type=str, default=None, help='Whether to use colorized output (default is auto)') parser.add_argument('--python-versions', action='append', @@ -116,20 +120,34 @@ def main(argv): else: pyversions.extend(ver.split()) - # Actually test those versions now. - statuses = [] - for ver in pyversions: - prog = get_python_executable(ver) - cmd = [prog, '-b', '-Wd', 'pym/portage/tests/runTests.py'] + args - if os.access(prog, os.X_OK): - print('%sTesting with Python %s...%s' % - (colors.GOOD, ver, colors.NORMAL)) - statuses.append(subprocess.call(cmd)) - elif not ignore_missing: - print('%sCould not find requested Python %s%s' % - (colors.BAD, ver, colors.NORMAL)) - statuses.append(1) - print() + tempdir = None + try: + # Set up a single tempdir for all the tests to use. + # This way we know the tests won't leak things on us. + tempdir = tempfile.mkdtemp(prefix='portage.runtests.') + os.environ['TMPDIR'] = tempdir + + # Actually test those versions now. + statuses = [] + for ver in pyversions: + prog = get_python_executable(ver) + cmd = [prog, '-b', '-Wd', 'pym/portage/tests/runTests.py'] + args + if os.access(prog, os.X_OK): + print('%sTesting with Python %s...%s' % + (colors.GOOD, ver, colors.NORMAL)) + statuses.append(subprocess.call(cmd)) + elif not ignore_missing: + print('%sCould not find requested Python %s%s' % + (colors.BAD, ver, colors.NORMAL)) + statuses.append(1) + print() + finally: + if tempdir is not None: + if opts.keep_temp: + print('Temporary directory left behind:\n%s' % tempdir) + else: + # Nuke our tempdir and anything that might be under it. + shutil.rmtree(tempdir, True) # Then summarize it all. print('\nSummary:\n') -- 2.5.2