aos/doc/012-services/deptree.py
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

79 lines
1.6 KiB
Python

colors=[
"#ff0000",
"#00ff00",
"#0000ff",
"#ffff00",
"#ff00ff",
"#00ffff",
"#ff9900",
"#ff0099",
"#00ff99",
"#99ff00",
"#9900ff",
"#0099ff",
"#ff9933",
"#ff3399",
"#99ff33",
"#9933ff",
"#33ff99",
"#3399ff"
]
entries = dict()
# open file
f = open("dep.txt")
# read first list until "---"
i = 0
for line in f:
line = line.strip()
if line.startswith("---"):
break
entries[line] = colors[i % len(colors)]
i += 1
# create 2d dict from list
deps = dict()
for entry in entries.keys():
deps[entry] = dict()
e_dep = deps[entry]
for entry2 in entries:
e_dep[entry2] = 0
# read rest of file to get all dependencies
for line in f:
line = line.strip()
parts = line.split(None) # split on whitespace
if line.startswith("#"):
continue
if len(parts) >= 3:
deps[parts[0]][parts[1]] = parts[2]
f.close()
# write dot graph header
print "# process with: dot -Tpdf mydep.dot -O"
print "digraph dep {"
print "\tcolorscheme=x11;"
# write actual dot content
for dep1 in deps.keys():
for dep2 in deps[dep1].keys():
if deps[dep1][dep2] == "0":
# no dependency
continue
if deps[dep1][dep2] == "1":
print dep1, " -> ", dep2, " [color=\"", entries[dep1], "\"];"
elif deps[dep1][dep2] == "2":
print dep1, " -> ", dep2, " [color=\"", entries[dep1], "\"][style=\"dotted\"];"
else:
# this dependency hasn't been processed yet
continue
# print dep1, " -> ", dep2, " [color=\"yellow\"];"
# write dot graph footer
print "}"