summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/_find_deep_system_runtime_deps.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-06-23 18:46:38 +0000
committerZac Medico <zmedico@gentoo.org>2009-06-23 18:46:38 +0000
commit6ca0735178ef51c087f35c2bbf2bca415bd4ab55 (patch)
tree2b8a816b6c17e2fd4f2f5c8f00d67db19c0855e1 /pym/_emerge/_find_deep_system_runtime_deps.py
parent078ea4131bf890142cd9da68c9af64982e33a795 (diff)
downloadportage-6ca0735178ef51c087f35c2bbf2bca415bd4ab55.tar.gz
portage-6ca0735178ef51c087f35c2bbf2bca415bd4ab55.tar.bz2
portage-6ca0735178ef51c087f35c2bbf2bca415bd4ab55.zip
Bug #275047 - Split _emerge/__init__.py into smaller pieces (part 5).
Thanks to Sebastian Mingramm (few) <s.mingramm@gmx.de> for this patch. svn path=/main/trunk/; revision=13672
Diffstat (limited to 'pym/_emerge/_find_deep_system_runtime_deps.py')
-rw-r--r--pym/_emerge/_find_deep_system_runtime_deps.py35
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
+