aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2016-03-29 13:11:06 -0400
committerJason R. Coombs <jaraco@jaraco.com>2016-03-29 13:11:06 -0400
commitd25e2a585c0e80dc89d72a91f8da0ba8198a4f7c (patch)
tree91ea7a83824b026bcb4f1d837708f6b459f1637e
parent2f95af84d585c19a8eb6a8e6d437acdbe3c3d2ae (diff)
parent2d8cb89459af1d68f7efd7da902c9e6954504740 (diff)
downloadexternal_python_setuptools-d25e2a585c0e80dc89d72a91f8da0ba8198a4f7c.tar.gz
external_python_setuptools-d25e2a585c0e80dc89d72a91f8da0ba8198a4f7c.tar.bz2
external_python_setuptools-d25e2a585c0e80dc89d72a91f8da0ba8198a4f7c.zip
Merge https://bitbucket.org/pypa/setuptools/pull-requests/185.
-rw-r--r--CHANGES.txt12
-rw-r--r--pkg_resources/__init__.py4
-rw-r--r--pkg_resources/tests/test_resources.py5
-rw-r--r--setuptools/tests/test_egg_info.py63
4 files changed, 74 insertions, 10 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index f44a3984..a784c33c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,11 +2,19 @@
CHANGES
=======
+20.5
+----
+
+* BB Pull Request #185: Add support for environment markers
+ in requirements in install_requires, setup_requires,
+ tests_require as well as adding a test for the existing
+ extra_requires machinery.
+
20.4
----
-* Issue #422: Moved hosting to `Github
- <https://github.com/pypa/setuptools>`_
+* Issue #422: Moved hosting to
+ `Github <https://github.com/pypa/setuptools>`_
from `Bitbucket <https://bitbucket.org/pypa/setuptools>`_.
Issues have been migrated, though all issues and comments
are attributed to bb-migration. So if you have a particular
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index 0534f54f..bb69b607 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -809,6 +809,10 @@ class WorkingSet(object):
if req in processed:
# Ignore cyclic or redundant dependencies
continue
+ # If the req has a marker, evaluate it -- skipping the req if
+ # it evaluates to False.
+ if req.marker and not req.marker.evaluate():
+ continue
dist = best.get(req.key)
if dist is None:
# Find the best distribution and add it to the map
diff --git a/pkg_resources/tests/test_resources.py b/pkg_resources/tests/test_resources.py
index f59d55d5..1e176771 100644
--- a/pkg_resources/tests/test_resources.py
+++ b/pkg_resources/tests/test_resources.py
@@ -182,6 +182,11 @@ class TestDistro:
msg = 'Foo 0.9 is installed but Foo==1.2 is required'
assert vc.value.report() == msg
+ ws = WorkingSet([]) # reset
+ # Environment markers are evaluated at resolution time
+ res = ws.resolve(parse_requirements("Foo;python_version<'2'"), ad)
+ assert list(res) == []
+
def testDistroDependsOptions(self):
d = self.distRequires("""
Twisted>=1.5
diff --git a/setuptools/tests/test_egg_info.py b/setuptools/tests/test_egg_info.py
index 7d51585b..6aed315f 100644
--- a/setuptools/tests/test_egg_info.py
+++ b/setuptools/tests/test_egg_info.py
@@ -1,4 +1,5 @@
import os
+import glob
import stat
from setuptools.extern.six.moves import map
@@ -89,17 +90,61 @@ class TestEggInfo(object):
sources_txt = os.path.join(egg_info_dir, 'SOURCES.txt')
assert 'docs/usage.rst' in open(sources_txt).read().split('\n')
- def _run_install_command(self, tmpdir_cwd, env):
+ def _setup_script_with_requires(self, requires_line):
+ setup_script = DALS("""
+ from setuptools import setup
+
+ setup(
+ name='foo',
+ %s
+ zip_safe=False,
+ )
+ """ % requires_line)
+ build_files({
+ 'setup.py': setup_script,
+ })
+
+ def test_install_requires_with_markers(self, tmpdir_cwd, env):
+ self._setup_script_with_requires(
+ """install_requires=["barbazquux;python_version<'2'"],""")
+ self._run_install_command(tmpdir_cwd, env)
+ egg_info_dir = self._find_egg_info_files(env.paths['lib']).base
+ requires_txt = os.path.join(egg_info_dir, 'requires.txt')
+ assert "barbazquux;python_version<'2'" in open(
+ requires_txt).read().split('\n')
+ assert glob.glob(os.path.join(env.paths['lib'], 'barbazquux*')) == []
+
+ def test_setup_requires_with_markers(self, tmpdir_cwd, env):
+ self._setup_script_with_requires(
+ """setup_requires=["barbazquux;python_version<'2'"],""")
+ self._run_install_command(tmpdir_cwd, env)
+ assert glob.glob(os.path.join(env.paths['lib'], 'barbazquux*')) == []
+
+ def test_tests_require_with_markers(self, tmpdir_cwd, env):
+ self._setup_script_with_requires(
+ """tests_require=["barbazquux;python_version<'2'"],""")
+ data = self._run_install_command(
+ tmpdir_cwd, env, cmd=['test'], output="Ran 0 tests in")
+ assert glob.glob(os.path.join(env.paths['lib'], 'barbazquux*')) == []
+
+ def test_extra_requires_with_markers(self, tmpdir_cwd, env):
+ self._setup_script_with_requires(
+ """extra_requires={":python_version<'2'": ["barbazquux"]},""")
+ self._run_install_command(tmpdir_cwd, env)
+ assert glob.glob(os.path.join(env.paths['lib'], 'barbazquux*')) == []
+
+ def _run_install_command(self, tmpdir_cwd, env, cmd=None, output=None):
environ = os.environ.copy().update(
HOME=env.paths['home'],
)
- cmd = [
- 'install',
- '--home', env.paths['home'],
- '--install-lib', env.paths['lib'],
- '--install-scripts', env.paths['scripts'],
- '--install-data', env.paths['data'],
- ]
+ if cmd is None:
+ cmd = [
+ 'install',
+ '--home', env.paths['home'],
+ '--install-lib', env.paths['lib'],
+ '--install-scripts', env.paths['scripts'],
+ '--install-data', env.paths['data'],
+ ]
code, data = environment.run_setup_py(
cmd=cmd,
pypath=os.pathsep.join([env.paths['lib'], str(tmpdir_cwd)]),
@@ -108,6 +153,8 @@ class TestEggInfo(object):
)
if code:
raise AssertionError(data)
+ if output:
+ assert output in data
def _find_egg_info_files(self, root):
class DirList(list):