From d22afa9d933529c01b74a6127fa41ce49bf0182b Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 30 May 2019 16:46:03 -0500 Subject: [PATCH] fix: Gracefully handle read-only sdists For a package without dependencies in pypi's database, like p4python, the sdist is required. The problem is p4python was developed in perforce where all files are read-only by default and deleting the temp directory fails. So we need to use the custom-built temp directory and specially handle read-only files to be able to use p4python in poetry. Fixes #520 --- poetry/utils/helpers.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/poetry/utils/helpers.py b/poetry/utils/helpers.py index 85d18a71d44..af68a6d0105 100644 --- a/poetry/utils/helpers.py +++ b/poetry/utils/helpers.py @@ -34,19 +34,18 @@ def normalize_version(version): # type: (str) -> str return str(Version(version)) +def _del_ro(action, name, exc): + os.chmod(name, stat.S_IWRITE) + os.remove(name) + + @contextmanager def temporary_directory(*args, **kwargs): - try: - from tempfile import TemporaryDirectory - - with TemporaryDirectory(*args, **kwargs) as name: - yield name - except ImportError: - name = tempfile.mkdtemp(*args, **kwargs) + name = tempfile.mkdtemp(*args, **kwargs) - yield name + yield name - shutil.rmtree(name) + shutil.rmtree(name, onerror=_del_ro) def parse_requires(requires): # type: (str) -> List[str]