Commit 8e49e901 by Sébastien Eustace

Fix a recursion error with circular dependencies

parent 26ecdddb
# Change Log # Change Log
## [Unreleased]
### Fixed
- Fixed a recursion error with circular dependencies.
## [0.11.4] - 2018-07-30 ## [0.11.4] - 2018-07-30
### Fixed ### Fixed
......
...@@ -213,6 +213,9 @@ class Solver: ...@@ -213,6 +213,9 @@ class Solver:
if not is_activated: if not is_activated:
continue continue
if previous and previous["name"] == dependency.name:
break
for pkg in packages: for pkg in packages:
if pkg.name == dependency.name: if pkg.name == dependency.name:
# If there is already a child with this name # If there is already a child with this name
......
...@@ -893,3 +893,31 @@ def test_solver_fails_if_dependency_name_does_not_match_package(solver, repo, pa ...@@ -893,3 +893,31 @@ def test_solver_fails_if_dependency_name_does_not_match_package(solver, repo, pa
with pytest.raises(RuntimeError): with pytest.raises(RuntimeError):
solver.solve() solver.solve()
def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency(
solver, repo, package
):
package_a = get_package("A", "1.0")
package_a.add_dependency("B", "^1.0")
package_b = get_package("B", "1.0")
package_b.add_dependency("C", "^1.0")
package_c = get_package("C", "1.0")
package_c.add_dependency("B", "^1.0")
repo.add_package(package_a)
repo.add_package(package_b)
repo.add_package(package_c)
package.add_dependency("A", "^1.0")
ops = solver.solve()
check_solver_result(
ops,
[
{"job": "install", "package": package_c},
{"job": "install", "package": package_b},
{"job": "install", "package": package_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