e4f0d0aba44152419d568f275f7f5eb627a12fa0
[samba.git] / source4 / script / depfilter.py
1 #!/usr/bin/env python
2 #
3 # Filter out arcs in a dotty graph that are at or below a certain
4 # node.  This is useful for visualising parts of the dependency graph.
5 #
6
7 # Command line stuff
8
9 from __future__ import print_function
10 import sys, sre
11
12 if len(sys.argv) != 2:
13     print('Usage: depfilter.py NODE')
14     sys.exit(1)
15
16 top = sys.argv[1]
17
18 # Read in dot file
19
20 lines = sys.stdin.readlines()
21
22 graph = {}
23
24 for arc in lines[1:-1]:
25     match = sre.search('"(.*)" -> "(.*)"', arc)
26     n1, n2 = match.group(1), match.group(2)
27     if n1 not in graph:
28         graph[n1] = []
29     graph[n1].append(n2)
30
31 # Create subset of 'graph' rooted at 'top'
32
33 subgraph = {}
34
35
36 def add_deps(node):
37     if node in graph and node not in subgraph:
38         subgraph[node] = graph[node]
39         for n in graph[node]:
40             add_deps(n)
41
42 add_deps(top)
43
44 # Generate output
45
46 print(lines[0], end=' ')
47
48 for key, value in subgraph.items():
49     for n in value:
50         print('\t"%s" -> "%s"' % (key, n))
51
52 print(lines[-1], end=' ')