Commit f8a6f27b authored by Jason R. Coombs's avatar Jason R. Coombs

Merge branch 'master' into fix_handling_of_find-links_in_setup.cfg

parents 6f46a4b7 812b83c9
...@@ -34,8 +34,17 @@ To report a security vulnerability, please use the ...@@ -34,8 +34,17 @@ To report a security vulnerability, please use the
Tidelift will coordinate the fix and disclosure. Tidelift will coordinate the fix and disclosure.
For Enterprise
==============
Available as part of the Tidelift Subscription.
Setuptools and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
`Learn more <https://tidelift.com/subscription/pkg/pypi-setuptools?utm_source=pypi-setuptools&utm_medium=referral&utm_campaign=github>`_.
Code of Conduct Code of Conduct
--------------- ===============
Everyone interacting in the setuptools project's codebases, issue trackers, Everyone interacting in the setuptools project's codebases, issue trackers,
chat rooms, and mailing lists is expected to follow the chat rooms, and mailing lists is expected to follow the
......
Build dependencies (setup_requires and tests_require) now install transitive dependencies indicated by extras.
<h3 class="donation">For Enterprise</h3>
<p>
Professionally-supported {{ project }} is available with the
<a href="https://tidelift.com/subscription/pkg/pypi-{{ project }}?utm_source=pypi-{{ project }}&utm_medium=referral">Tidelift Subscription</a>.
</p>
<h3>Download</h3> <h3>Download</h3>
<p>Current version: <b>{{ version }}</b></p> <p>Current version: <b>{{ version }}</b></p>
...@@ -6,10 +13,3 @@ ...@@ -6,10 +13,3 @@
<h3>Questions? Suggestions? Contributions?</h3> <h3>Questions? Suggestions? Contributions?</h3>
<p>Visit the <a href="{{ package_url }}">Project page</a> </p> <p>Visit the <a href="{{ package_url }}">Project page</a> </p>
<h3 class="donation">Professional support</h3>
<p>
Professionally-supported {{ project }} is available with the
<a href="https://tidelift.com/subscription/pkg/pypi-{{ project }}?utm_source=pypi-{{ project }}&utm_medium=readme">Tidelift Subscription</a>.
</p>
...@@ -73,8 +73,8 @@ def fetch_build_egg(dist, req): ...@@ -73,8 +73,8 @@ def fetch_build_egg(dist, req):
pkg_resources.get_distribution('wheel') pkg_resources.get_distribution('wheel')
except pkg_resources.DistributionNotFound: except pkg_resources.DistributionNotFound:
dist.announce('WARNING: The wheel package is not available.', log.WARN) dist.announce('WARNING: The wheel package is not available.', log.WARN)
if not isinstance(req, pkg_resources.Requirement): # Ignore environment markers; if supplied, it is required.
req = pkg_resources.Requirement.parse(req) req = strip_marker(req)
# Take easy_install options into account, but do not override relevant # Take easy_install options into account, but do not override relevant
# pip environment variables (like PIP_INDEX_URL or PIP_QUIET); they'll # pip environment variables (like PIP_INDEX_URL or PIP_QUIET); they'll
# take precedence. # take precedence.
...@@ -136,3 +136,15 @@ def fetch_build_egg(dist, req): ...@@ -136,3 +136,15 @@ def fetch_build_egg(dist, req):
dist = pkg_resources.Distribution.from_filename( dist = pkg_resources.Distribution.from_filename(
dist_location, metadata=dist_metadata) dist_location, metadata=dist_metadata)
return dist return dist
def strip_marker(req):
"""
Return a new requirement without the environment marker to avoid
calling pip with something like `babel; extra == "i18n"`, which
would always be ignored.
"""
# create a copy to avoid mutating the input
req = pkg_resources.Requirement.parse(str(req))
req.marker = None
return req
...@@ -37,6 +37,7 @@ from setuptools.tests import fail_on_ascii ...@@ -37,6 +37,7 @@ from setuptools.tests import fail_on_ascii
import pkg_resources import pkg_resources
from . import contexts from . import contexts
from .files import build_files
from .textwrap import DALS from .textwrap import DALS
__metaclass__ = type __metaclass__ = type
...@@ -782,6 +783,49 @@ class TestSetupRequires: ...@@ -782,6 +783,49 @@ class TestSetupRequires:
find_links=temp_dir)) find_links=temp_dir))
run_setup(test_setup_py, [str('--version')]) 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
# on `extra_dep` (whose is not already installed).
with contexts.save_pkg_resources_state():
with contexts.tempdir() as temp_dir:
# Create source distribution for `extra_dep`.
make_trivial_sdist(os.path.join(temp_dir, 'extra_dep-1.0.tar.gz'), 'extra_dep', '1.0')
# Create source tree for `dep`.
dep_pkg = os.path.join(temp_dir, 'dep')
os.mkdir(dep_pkg)
build_files({
'setup.py':
DALS("""
import setuptools
setuptools.setup(
name='dep', version='2.0',
extras_require={'extra': ['extra_dep']},
)
"""),
'setup.cfg': '',
}, prefix=dep_pkg)
# "Install" dep.
run_setup(os.path.join(dep_pkg, 'setup.py'), [str('dist_info')])
working_set.add_entry(dep_pkg)
# Create source tree for test package.
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:
fp.write(DALS(
'''
from setuptools import installer, setup
setup(setup_requires='dep[extra]')
'''))
# Check...
monkeypatch.setenv(str('PIP_FIND_LINKS'), str(temp_dir))
monkeypatch.setenv(str('PIP_NO_INDEX'), str('1'))
monkeypatch.setenv(str('PIP_RETRIES'), str('0'))
monkeypatch.setenv(str('PIP_TIMEOUT'), str('0'))
run_setup(test_setup_py, [str('--version')])
def make_trivial_sdist(dist_path, distname, version): def make_trivial_sdist(dist_path, distname, version):
""" """
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment