summaryrefslogtreecommitdiffstats
path: root/source4/script/depfilter.py
diff options
context:
space:
mode:
Diffstat (limited to 'source4/script/depfilter.py')
-rwxr-xr-xsource4/script/depfilter.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/source4/script/depfilter.py b/source4/script/depfilter.py
new file mode 100755
index 0000000..ee2ce9d
--- /dev/null
+++ b/source4/script/depfilter.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+#
+# Filter out arcs in a dotty graph that are at or below a certain
+# node. This is useful for visualising parts of the dependency graph.
+#
+
+# Command line stuff
+
+import sys
+import re
+
+if len(sys.argv) != 2:
+ print('Usage: depfilter.py NODE')
+ sys.exit(1)
+
+top = sys.argv[1]
+
+# Read in dot file
+
+lines = sys.stdin.readlines()
+
+graph = {}
+
+for arc in lines[1:-1]:
+ match = re.search('"(.*)" -> "(.*)"', arc)
+ n1, n2 = match.group(1), match.group(2)
+ if n1 not in graph:
+ graph[n1] = []
+ graph[n1].append(n2)
+
+# Create subset of 'graph' rooted at 'top'
+
+subgraph = {}
+
+
+def add_deps(node):
+ if node in graph and node not in subgraph:
+ subgraph[node] = graph[node]
+ for n in graph[node]:
+ add_deps(n)
+
+
+add_deps(top)
+
+# Generate output
+
+print(lines[0], end=' ')
+
+for key, value in subgraph.items():
+ for n in value:
+ print('\t"%s" -> "%s"' % (key, n))
+
+print(lines[-1], end=' ')