Commit 40dc3ad9 by Sébastien Eustace Committed by GitHub

Merge pull request #3839 from jguice/master

Resolution speed improvement
parents b2ac34eb c1891c71
......@@ -277,9 +277,10 @@ class Solver:
except SolveFailure as e:
raise SolverProblemError(e)
# NOTE passing explicit empty array for seen to reset between invocations during update + install cycle
results = dict(
depth_first_search(
PackageNode(self._package, packages), aggregate_package_nodes
PackageNode(self._package, packages, seen=[]), aggregate_package_nodes
)
)
......@@ -390,6 +391,7 @@ class PackageNode(DFSNode):
self,
package: Package,
packages: List[Package],
seen: List[Package],
previous: Optional["PackageNode"] = None,
previous_dep: Optional[
Union[
......@@ -412,6 +414,7 @@ class PackageNode(DFSNode):
) -> None:
self.package = package
self.packages = packages
self.seen = seen
self.previous = previous
self.previous_dep = previous_dep
......@@ -434,6 +437,12 @@ class PackageNode(DFSNode):
def reachable(self) -> List["PackageNode"]:
children: List[PackageNode] = []
# skip already traversed packages
if self.package in self.seen:
return []
else:
self.seen.append(self.package)
if (
self.previous_dep
and self.previous_dep is not self.dep
......@@ -470,6 +479,7 @@ class PackageNode(DFSNode):
PackageNode(
pkg,
self.packages,
self.seen,
self,
dependency,
self.dep or dependency,
......
......@@ -866,14 +866,14 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies(
],
)
d = ops[0].package
b = ops[1].package
c = ops[2].package
d = ops[0].package
a = ops[3].package
assert d.category == "dev"
assert c.category == "dev"
assert b.category == "main"
assert c.category == "dev"
assert a.category == "main"
......@@ -925,15 +925,15 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
)
b = ops[0].package
c = ops[3].package
d = ops[1].package
a = ops[2].package
c = ops[3].package
e = ops[4].package
assert d.category == "dev"
assert c.category == "dev"
assert b.category == "main"
assert d.category == "dev"
assert a.category == "main"
assert c.category == "dev"
assert e.category == "main"
......
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