Unverified Commit aac16afe authored by Sébastien Eustace's avatar Sébastien Eustace
Browse files

Fix platform specifications not being used when resolving dependencies

parent 0895aaa2
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
- Fixed python restricted dependencies not being checked agaisnt virtualenv version.
- Fixed python/platform constraint not being picked up for subdependencies.
- Fixed skipped packages appearing as installing.
- Fixed platform specification not being used when resolving dependencies.


## [0.4.2] - 2018-03-10
+4 −1
Changes for poetry/packages/constraints/platform_constraint.py: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -50,11 +50,14 @@ class PlatformConstraint(BaseConstraint):
        return self._platform

    def matches(self, provider):
        if not isinstance(provider, PlatformConstraint):
        if not isinstance(provider, (PlatformConstraint, EmptyConstraint)):
            raise ValueError(
                'Platform constraints can only be compared with each other'
            )

        if isinstance(provider, EmptyConstraint):
            return True

        is_equal_op = self.OP_EQ is self._operator
        is_non_equal_op = self.OP_NE is self._operator
        is_provider_equal_op = self.OP_EQ is provider.operator
+4 −1
Changes for poetry/puzzle/provider.py: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -179,7 +179,10 @@ class Provider(SpecificationProvider):
            if not any([r.allows_prereleases() for r in vertex.requirements]):
                return False

        return self._package.python_constraint.matches(package.python_constraint)
        return (
            self._package.python_constraint.matches(package.python_constraint)
            and self._package.platform_constraint.matches(package.platform_constraint)
        )

    def sort_dependencies(self,
                          dependencies: List[Dependency],
+30 −0
Changes for tests/puzzle/test_solver.py: 30 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -326,6 +326,36 @@ def test_solver_solves_optional_and_compatible_packages(solver, repo, package):
    ])


def test_solver_solves_while_respecting_root_platforms(solver, repo, package):
    package.platform = 'darwin'
    package_a = get_package('A', '1.0')
    package_b = get_package('B', '1.0')
    package_b.python_versions = '^3.6'
    package_c12 = get_package('C', '1.2')
    package_c12.platform = 'win32'
    package_c10 = get_package('C', '1.0')
    package_c10.platform = 'darwin'
    package_b.add_dependency('C', '^1.0')

    repo.add_package(package_a)
    repo.add_package(package_b)
    repo.add_package(package_c10)
    repo.add_package(package_c12)

    request = [
        get_dependency('A'),
        get_dependency('B')
    ]

    ops = solver.solve(request)

    check_solver_result(ops, [
        {'job': 'install', 'package': package_c10},
        {'job': 'install', 'package': package_b},
        {'job': 'install', 'package': package_a},
    ])


def test_solver_does_not_return_extras_if_not_requested(solver, repo):
    package_a = get_package('A', '1.0')
    package_b = get_package('B', '1.0')