Commit dcf2dc09 by Sébastien Eustace

Prevent solver from selecting packages with empty markers

parent 030af110
...@@ -184,6 +184,7 @@ class Solver: ...@@ -184,6 +184,7 @@ class Solver:
graph = self._build_graph(self._package, packages) graph = self._build_graph(self._package, packages)
depths = [] depths = []
final_packages = []
for package in packages: for package in packages:
category, optional, marker, depth = self._get_tags_for_package( category, optional, marker, depth = self._get_tags_for_package(
package, graph package, graph
...@@ -191,14 +192,17 @@ class Solver: ...@@ -191,14 +192,17 @@ class Solver:
if marker is None: if marker is None:
marker = AnyMarker() marker = AnyMarker()
if marker.is_empty():
continue
package.category = category package.category = category
package.optional = optional package.optional = optional
package.marker = marker package.marker = marker
depths.append(depth) depths.append(depth)
final_packages.append(package)
return packages, depths return final_packages, depths
def _build_graph( def _build_graph(
self, package, packages, previous=None, previous_dep=None, dep=None self, package, packages, previous=None, previous_dep=None, dep=None
......
...@@ -1743,3 +1743,35 @@ def test_solver_chooses_from_secondary_if_explicit(package, installed, locked, i ...@@ -1743,3 +1743,35 @@ def test_solver_chooses_from_secondary_if_explicit(package, installed, locked, i
assert "" == ops[1].package.source_url assert "" == ops[1].package.source_url
assert "" == ops[2].package.source_type assert "" == ops[2].package.source_type
assert "" == ops[2].package.source_url assert "" == ops[2].package.source_url
def test_solver_discards_packages_with_empty_markers(
package, installed, locked, io, pool, repo
):
package.python_versions = "~2.7 || ^3.4"
package.add_dependency(
"a", {"version": "^0.1.0", "markers": "python_version >= '3.4'"}
)
package_a = get_package("a", "0.1.0")
package_a.add_dependency(
"b", {"version": "^0.1.0", "markers": "python_version < '3.2'"}
)
package_a.add_dependency("c", "^0.2.0")
package_b = get_package("b", "0.1.0")
package_c = get_package("c", "0.2.0")
repo.add_package(package_a)
repo.add_package(package_b)
repo.add_package(package_c)
solver = Solver(package, pool, installed, locked, io)
ops = solver.solve()
check_solver_result(
ops,
[
{"job": "install", "package": package_c},
{"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