summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2019-12-01 09:46:23 -0500
committerGitHub <noreply@github.com>2019-12-01 09:46:23 -0500
commita8d95686d6d4852c5a119c66a565fcfed353016a (patch)
treee92ed09959918ccb4803f3b7d58bb12b43f9c04f
parent812b83c9b4c6134c559f8609b69bca37d7c1204d (diff)
parentf8a6f27b42078292fa8624d294558ffcf884c7cd (diff)
downloadpython-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.txt1
-rw-r--r--setuptools/installer.py13
-rw-r--r--setuptools/tests/test_easy_install.py38
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