diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2019-12-01 09:46:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-01 09:46:23 -0500 |
commit | a8d95686d6d4852c5a119c66a565fcfed353016a (patch) | |
tree | e92ed09959918ccb4803f3b7d58bb12b43f9c04f | |
parent | 812b83c9b4c6134c559f8609b69bca37d7c1204d (diff) | |
parent | f8a6f27b42078292fa8624d294558ffcf884c7cd (diff) | |
download | python-setuptools-git-a8d95686d6d4852c5a119c66a565fcfed353016a.tar.gz |
Merge pull request #1921 from benoit-pierre/fix_handling_of_find-links_in_setup.cfg
fix support for easy_install's find-links option in setup.cfg
-rw-r--r-- | changelog.d/1921.change.txt | 1 | ||||
-rw-r--r-- | setuptools/installer.py | 13 | ||||
-rw-r--r-- | setuptools/tests/test_easy_install.py | 38 |
3 files changed, 50 insertions, 2 deletions
diff --git a/changelog.d/1921.change.txt b/changelog.d/1921.change.txt new file mode 100644 index 00000000..7c001eb8 --- /dev/null +++ b/changelog.d/1921.change.txt @@ -0,0 +1 @@ +Fix support for easy_install's ``find-links`` option in ``setup.cfg``. diff --git a/setuptools/installer.py b/setuptools/installer.py index 527b95de..9f8be2ef 100644 --- a/setuptools/installer.py +++ b/setuptools/installer.py @@ -7,11 +7,20 @@ from distutils.errors import DistutilsError import pkg_resources from setuptools.command.easy_install import easy_install +from setuptools.extern import six from setuptools.wheel import Wheel from .py31compat import TemporaryDirectory +def _fixup_find_links(find_links): + """Ensure find-links option end-up being a list of strings.""" + if isinstance(find_links, six.string_types): + return find_links.split() + assert isinstance(find_links, (tuple, list)) + return find_links + + def _legacy_fetch_build_egg(dist, req): """Fetch an egg needed for building. @@ -31,7 +40,7 @@ def _legacy_fetch_build_egg(dist, req): if dist.dependency_links: links = dist.dependency_links[:] if 'find_links' in opts: - links = opts['find_links'][1] + links + links = _fixup_find_links(opts['find_links'][1]) + links opts['find_links'] = ('setup', links) install_dir = dist.get_egg_cache_dir() cmd = easy_install( @@ -84,7 +93,7 @@ def fetch_build_egg(dist, req): else: index_url = None if 'find_links' in opts: - find_links = opts['find_links'][1][:] + find_links = _fixup_find_links(opts['find_links'][1])[:] else: find_links = [] if dist.dependency_links: diff --git a/setuptools/tests/test_easy_install.py b/setuptools/tests/test_easy_install.py index f6da1b16..2be1be47 100644 --- a/setuptools/tests/test_easy_install.py +++ b/setuptools/tests/test_easy_install.py @@ -745,6 +745,44 @@ class TestSetupRequires: eggs = list(map(str, pkg_resources.find_distributions(os.path.join(test_pkg, '.eggs')))) assert eggs == ['dep 1.0'] + @pytest.mark.parametrize('use_legacy_installer,with_dependency_links_in_setup_py', + itertools.product((False, True), (False, True))) + def test_setup_requires_with_find_links_in_setup_cfg(self, monkeypatch, + use_legacy_installer, + with_dependency_links_in_setup_py): + monkeypatch.setenv(str('PIP_RETRIES'), str('0')) + monkeypatch.setenv(str('PIP_TIMEOUT'), str('0')) + with contexts.save_pkg_resources_state(): + with contexts.tempdir() as temp_dir: + make_trivial_sdist(os.path.join(temp_dir, 'python-xlib-42.tar.gz'), 'python-xlib', '42') + test_pkg = os.path.join(temp_dir, 'test_pkg') + test_setup_py = os.path.join(test_pkg, 'setup.py') + test_setup_cfg = os.path.join(test_pkg, 'setup.cfg') + os.mkdir(test_pkg) + with open(test_setup_py, 'w') as fp: + if with_dependency_links_in_setup_py: + dependency_links = [os.path.join(temp_dir, 'links')] + else: + dependency_links = [] + fp.write(DALS( + ''' + from setuptools import installer, setup + if {use_legacy_installer}: + installer.fetch_build_egg = installer._legacy_fetch_build_egg + setup(setup_requires='python-xlib==42', + dependency_links={dependency_links!r}) + ''').format(use_legacy_installer=use_legacy_installer, + dependency_links=dependency_links)) + with open(test_setup_cfg, 'w') as fp: + fp.write(DALS( + ''' + [easy_install] + index_url = {index_url} + find_links = {find_links} + ''').format(index_url=os.path.join(temp_dir, 'index'), + find_links=temp_dir)) + run_setup(test_setup_py, [str('--version')]) + def test_setup_requires_with_transitive_extra_dependency(self, monkeypatch): # Use case: installing a package with a build dependency on # an already installed `dep[extra]`, which in turn depends |