| # Copyright 1999-2009 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| from _emerge.DepPriority import DepPriority |
| from _emerge.Package import Package |
| |
| |
| def _find_deep_system_runtime_deps(graph): |
| deep_system_deps = set() |
| node_stack = [] |
| for node in graph: |
| if not isinstance(node, Package) or node.operation == "uninstall": |
| continue |
| if node.root_config.sets["system"].findAtomForPackage(node): |
| node_stack.append(node) |
| |
| def ignore_priority(priority): |
| """ |
| Ignore non-runtime priorities. |
| """ |
| if isinstance(priority, DepPriority) and ( |
| priority.runtime or priority.runtime_post |
| ): |
| return False |
| return True |
| |
| while node_stack: |
| node = node_stack.pop() |
| if node in deep_system_deps: |
| continue |
| deep_system_deps.add(node) |
| for child in graph.child_nodes(node, ignore_priority=ignore_priority): |
| if not isinstance(child, Package) or child.operation == "uninstall": |
| continue |
| node_stack.append(child) |
| |
| return deep_system_deps |