Commit 9e58f06c by Sébastien Eustace

Fix a bug where dependencies constraints were too strict in lock

parent afccb494
# Change Log
## [Unreleased]
### Fixed
- Fixed a bug where dependencies constraints in lock were too strict.
## [0.8.3] - 2018-04-16
### Fixed
......
......@@ -3,6 +3,7 @@ from typing import List
from poetry.mixology import Resolver
from poetry.mixology.dependency_graph import DependencyGraph
from poetry.mixology.exceptions import ResolverError
from poetry.packages.constraints.generic_constraint import GenericConstraint
from poetry.semver.version_parser import VersionParser
......@@ -67,17 +68,33 @@ class Solver:
requirements['python'] = req
continue
previous = parser.parse_constraints(requirements['python'])
previous = parser.parse_constraints(
requirements['python']
)
current = parser.parse_constraints(req)
if current.matches(previous):
requirements['python'] = req
if req_name == 'platform':
elif req_name == 'platform':
if 'platform' not in requirements:
requirements['platform'] = req
continue
previous = GenericConstraint.parse(
requirements['platform']
)
current = GenericConstraint.parse(req)
if current.matches(previous):
requirements['platform'] = req
# If requirements are empty, drop them
if 'python' in requirements and requirements['python'] == '*':
del requirements['python']
if 'platform' in requirements and requirements['platform'] == '*':
del requirements['platform']
vertex.payload.requirements = requirements
operations = []
......@@ -130,7 +147,7 @@ class Solver:
)
)
def _get_tags_for_vertex(self, vertex, requested):
def _get_tags_for_vertex(self, vertex, requested, original=None):
tags = {
'category': [],
'optional': True,
......@@ -159,11 +176,9 @@ class Solver:
for edge in vertex.incoming_edges:
for req in edge.origin.payload.requires:
if req.name == vertex.payload.name:
if req.python_versions != '*':
tags['requirements']['python'].append(req.python_versions)
tags['requirements']['python'].append(req.python_versions)
if req.platform != '*':
tags['requirements']['platform'].append(req.platform)
tags['requirements']['platform'].append(req.platform)
sub_tags = self._get_tags_for_vertex(edge.origin, requested)
......
......@@ -502,3 +502,34 @@ def test_solver_does_not_return_prereleases_if_not_requested(solver, repo):
{'job': 'install', 'package': package_b},
{'job': 'install', 'package': package_c},
])
def test_solver_sub_dependencies_with_requirements(solver, repo):
package_a = get_package('A', '1.0')
package_b = get_package('B', '1.0')
package_c = get_package('C', '1.0')
package_a.add_dependency('C', {'version': '^1.0', 'python': '<4.0'})
package_b.add_dependency('C', '^1.0')
repo.add_package(package_a)
repo.add_package(package_b)
repo.add_package(package_c)
dependency_a = get_dependency('A')
dependency_b = get_dependency('B')
request = [
dependency_a,
dependency_b,
]
ops = solver.solve(request)
check_solver_result(ops, [
{'job': 'install', 'package': package_c},
{'job': 'install', 'package': package_a},
{'job': 'install', 'package': package_b},
])
op = ops[0]
assert op.package.requirements == {}
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