diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2016-07-21 12:14:42 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2016-07-21 12:14:42 -0400 |
commit | 9f77a068c02a3937762b8292c20e06d072247825 (patch) | |
tree | 44af03e2ab497cd3c60ae494a601bf97d9c556f5 /setuptools/command/sdist.py | |
parent | be2684d801b99757d35345809d6a0343ce863d75 (diff) | |
download | external_python_setuptools-9f77a068c02a3937762b8292c20e06d072247825.tar.gz external_python_setuptools-9f77a068c02a3937762b8292c20e06d072247825.tar.bz2 external_python_setuptools-9f77a068c02a3937762b8292c20e06d072247825.zip |
Disable os.link during make_distribution. Fixes #516.
Note that better would be if sdist provided some sort of hooks to better control the file copying, but since it does not, this technique will suffice for now.
Diffstat (limited to 'setuptools/command/sdist.py')
-rwxr-xr-x | setuptools/command/sdist.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/setuptools/command/sdist.py b/setuptools/command/sdist.py index 041ee42e..b86aae50 100755 --- a/setuptools/command/sdist.py +++ b/setuptools/command/sdist.py @@ -4,6 +4,7 @@ import distutils.command.sdist as orig import os import sys import io +import contextlib from setuptools.extern import six @@ -65,6 +66,32 @@ class sdist(orig.sdist): if data not in dist_files: dist_files.append(data) + def make_distribution(self): + """ + Workaround for #516 + """ + with self._remove_os_link(): + orig.sdist.make_distribution(self) + + @staticmethod + @contextlib.contextmanager + def _remove_os_link(): + """ + In a context, remove and restore os.link if it exists + """ + class NoValue: + pass + orig_val = getattr(os, 'link', NoValue) + try: + del os.link + except Exception: + pass + try: + yield + finally: + if orig_val is not NoValue: + setattr(os, 'link', orig_val) + def __read_template_hack(self): # This grody hack closes the template file (MANIFEST.in) if an # exception occurs during read_template. |