From 024c0f62e1e1d20b660c3df2eaf8a9ee01b9919e 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 7b9d8366fd2..fe48945c586 100644 --- a/poetry/utils/helpers.py +++ b/poetry/utils/helpers.py @@ -27,19 +27,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]