# HG changeset patch # User Yuya Nishihara # Date 1545047169 -32400 # Node ID bb5d74a35477751552bf2b95160b57b72940652f # Parent 328557af18eb1358cf83b47970e31ee4659ca39f run-tests: fix permission to clean up unreadable directories I found many hgtests.* directories left in $TMPDIR, which couldn't be deleted because test-ssh-repoerror.t created some directories with a-rx mode. diff -r 328557af18eb -r bb5d74a35477 tests/run-tests.py --- a/tests/run-tests.py Sun Dec 16 17:08:46 2018 +0900 +++ b/tests/run-tests.py Mon Dec 17 20:46:09 2018 +0900 @@ -586,6 +586,17 @@ shutil.copy(src, dst) os.remove(src) +def makecleanable(path): + """Try to fix directory permission recursively so that the entire tree + can be deleted""" + for dirpath, dirnames, _filenames in os.walk(path, topdown=True): + for d in dirnames: + p = os.path.join(dirpath, d) + try: + os.chmod(p, os.stat(p).st_mode & 0o777 | 0o700) # chmod u+rwx + except OSError: + pass + _unified_diff = difflib.unified_diff if PYTHON3: import functools @@ -952,7 +963,13 @@ (self._testtmp.decode('utf-8'), self._threadtmp.decode('utf-8'))) else: - shutil.rmtree(self._testtmp, True) + try: + shutil.rmtree(self._testtmp) + except OSError: + # unreadable directory may be left in $TESTTMP; fix permission + # and try again + makecleanable(self._testtmp) + shutil.rmtree(self._testtmp, True) shutil.rmtree(self._threadtmp, True) if self._usechg: