diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2016-03-29 13:11:06 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2016-03-29 13:11:06 -0400 |
commit | d25e2a585c0e80dc89d72a91f8da0ba8198a4f7c (patch) | |
tree | 91ea7a83824b026bcb4f1d837708f6b459f1637e | |
parent | 2f95af84d585c19a8eb6a8e6d437acdbe3c3d2ae (diff) | |
parent | 2d8cb89459af1d68f7efd7da902c9e6954504740 (diff) | |
download | external_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.txt | 12 | ||||
-rw-r--r-- | pkg_resources/__init__.py | 4 | ||||
-rw-r--r-- | pkg_resources/tests/test_resources.py | 5 | ||||
-rw-r--r-- | setuptools/tests/test_egg_info.py | 63 |
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): |