diff options
Diffstat (limited to 'pym/_emerge/_find_deep_system_runtime_deps.py')
-rw-r--r-- | pym/_emerge/_find_deep_system_runtime_deps.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/pym/_emerge/_find_deep_system_runtime_deps.py b/pym/_emerge/_find_deep_system_runtime_deps.py new file mode 100644 index 000000000..3249168f2 --- /dev/null +++ b/pym/_emerge/_find_deep_system_runtime_deps.py @@ -0,0 +1,35 @@ +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 + |