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:
): # type: (DependencyPackage) -> DependencyPackage
if package.is_root():
package = package.clone()
if not package.is_root() and package.source_type not in {
requires = package.all_requires
elif not package.is_root() and package.source_type not in {
"directory",
"file",
"url",
......@@ -550,10 +550,13 @@ class Provider:
repository=package.dependency.source_name,
),
)
requires = package.requires
else:
requires = package.requires
dependencies = [
r
for r in package.requires
for r in requires
if self._package.python_constraint.allows_any(r.python_constraint)
]
......@@ -582,6 +585,8 @@ class Provider:
duplicates[dep.name].append(dep)
print(package)
print(duplicates)
dependencies = []
for dep_name, deps in duplicates.items():
if len(deps) == 1:
......
......@@ -1811,3 +1811,27 @@ def test_solver_discards_packages_with_empty_markers(
{"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