Commit 426dbdcf by Sébastien Eustace

Fix circular dependencies resolution

parent 1aa1ab29
# Change Log # Change Log
## [Unreleased]
### Fixed
- Fixed dependency resolution with circular dependencies.
## [0.12.16] - 2019-05-17 ## [0.12.16] - 2019-05-17
### Fixed ### Fixed
......
...@@ -248,7 +248,10 @@ class Solver: ...@@ -248,7 +248,10 @@ class Solver:
break break
if previous and previous["name"] == dependency.name: if previous and previous["name"] == dependency.name:
break # We have a circular dependency.
# Since the dependencies are resolved we can
# simply skip it because we already have it
continue
for pkg in packages: for pkg in packages:
if pkg.name == dependency.name and dependency.constraint.allows( if pkg.name == dependency.name and dependency.constraint.allows(
......
...@@ -726,20 +726,27 @@ def test_solver_circular_dependency(solver, repo, package): ...@@ -726,20 +726,27 @@ def test_solver_circular_dependency(solver, repo, package):
package_b = get_package("B", "1.0") package_b = get_package("B", "1.0")
package_b.add_dependency("A", "^1.0") package_b.add_dependency("A", "^1.0")
package_b.add_dependency("C", "^1.0")
package_c = get_package("C", "1.0")
repo.add_package(package_a) repo.add_package(package_a)
repo.add_package(package_b) repo.add_package(package_b)
repo.add_package(package_c)
ops = solver.solve() ops = solver.solve()
check_solver_result( check_solver_result(
ops, ops,
[ [
{"job": "install", "package": package_c},
{"job": "install", "package": package_b}, {"job": "install", "package": package_b},
{"job": "install", "package": package_a}, {"job": "install", "package": package_a},
], ],
) )
assert "main" == ops[0].package.category
def test_solver_duplicate_dependencies_same_constraint(solver, repo, package): def test_solver_duplicate_dependencies_same_constraint(solver, repo, package):
package.add_dependency("A") package.add_dependency("A")
......
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