Commit b2903b83 by Dos Moonen Committed by GitHub

Fix the solver adding a package as a dependency of itself when extras are involved (#5769)

* Add Failing test for #5727

* Fixes #5727

Co-authored-by: Dos Moonen <d.moonen@nki.nl>
parent 87769930
......@@ -164,21 +164,20 @@ class Solver:
if package.features:
for _package in packages:
if (
_package.name == package.name
and not _package.is_same_package_as(package)
not _package.features
and _package.name == package.name
and _package.version == package.version
):
for dep in package.requires:
if dep.is_same_package_as(_package):
# Prevent adding base package as a dependency to itself
if _package.name == dep.name:
continue
if dep not in _package.requires:
_package.add_dependency(dep)
continue
final_packages.append(package)
depths.append(results[package])
else:
final_packages.append(package)
depths.append(results[package])
# Return the packages in their original order with associated depths
return final_packages, depths
......
......@@ -793,6 +793,38 @@ def test_solver_finds_extras_next_to_non_extras(
)
def test_solver_merge_extras_into_base_package_multiple_repos_fixes_5727(
solver: Solver, repo: Repository, pool: Pool, package: ProjectPackage
):
package.add_dependency(
Factory.create_dependency("A", {"version": "*", "source": "legacy"})
)
package.add_dependency(Factory.create_dependency("B", {"version": "*"}))
package_a = get_package("A", "1.0")
package_a.extras = {"foo": []}
repo.add_package(package_a)
package_b = Package("B", "1.0", source_type="legacy")
package_b.add_dependency(package_a.with_features(["foo"]).to_dependency())
package_a = Package("A", "1.0", source_type="legacy")
package_a.extras = {"foo": []}
repo = Repository("legacy")
repo.add_package(package_a)
repo.add_package(package_b)
pool.add_repository(repo)
transaction = solver.solve()
ops = transaction.calculate_operations(synchronize=True)
assert len(ops[0].package.requires) == 0, "a should not require itself"
def test_solver_returns_prereleases_if_requested(
solver: Solver, repo: Repository, package: ProjectPackage
):
......
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