Commit 877618dc by Sébastien Eustace Committed by GitHub

Fix dependency resolution for conditional development dependencies (#1482)

parent 0e22bb5d
...@@ -534,8 +534,8 @@ class Provider: ...@@ -534,8 +534,8 @@ class Provider:
): # type: (DependencyPackage) -> DependencyPackage ): # type: (DependencyPackage) -> DependencyPackage
if package.is_root(): if package.is_root():
package = package.clone() package = package.clone()
requires = package.all_requires
if not package.is_root() and package.source_type not in { elif not package.is_root() and package.source_type not in {
"directory", "directory",
"file", "file",
"url", "url",
...@@ -550,10 +550,13 @@ class Provider: ...@@ -550,10 +550,13 @@ class Provider:
repository=package.dependency.source_name, repository=package.dependency.source_name,
), ),
) )
requires = package.requires
else:
requires = package.requires
dependencies = [ dependencies = [
r r
for r in package.requires for r in requires
if self._package.python_constraint.allows_any(r.python_constraint) if self._package.python_constraint.allows_any(r.python_constraint)
] ]
...@@ -582,6 +585,8 @@ class Provider: ...@@ -582,6 +585,8 @@ class Provider:
duplicates[dep.name].append(dep) duplicates[dep.name].append(dep)
print(package)
print(duplicates)
dependencies = [] dependencies = []
for dep_name, deps in duplicates.items(): for dep_name, deps in duplicates.items():
if len(deps) == 1: if len(deps) == 1:
......
...@@ -1811,3 +1811,27 @@ def test_solver_discards_packages_with_empty_markers( ...@@ -1811,3 +1811,27 @@ def test_solver_discards_packages_with_empty_markers(
{"job": "install", "package": package_a}, {"job": "install", "package": package_a},
], ],
) )
def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
solver, repo, package
):
package.python_versions = "~2.7 || ^3.5"
package.add_dependency("A", {"version": "^1.0", "python": "~2.7"}, category="dev")
package.add_dependency("A", {"version": "^2.0", "python": "^3.5"}, category="dev")
package_a100 = get_package("A", "1.0.0")
package_a200 = get_package("A", "2.0.0")
repo.add_package(package_a100)
repo.add_package(package_a200)
ops = solver.solve()
check_solver_result(
ops,
[
{"job": "install", "package": package_a100},
{"job": "install", "package": package_a200},
],
)
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