diff options
author | Joe Onorato <joeo@google.com> | 2012-05-07 17:15:15 -0700 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2012-08-16 22:45:55 -0700 |
commit | 8b46e302e6ed30e72ece1680767d00fc4241f2d5 (patch) | |
tree | 5556a1003fa95c42b6f198d9f3c9bbe3edac7063 /tools/filter-product-graph.py | |
parent | 9e253b06d218f29dde8ac6087c39a826d8b30d6e (diff) | |
download | build-8b46e302e6ed30e72ece1680767d00fc4241f2d5.zip build-8b46e302e6ed30e72ece1680767d00fc4241f2d5.tar.gz build-8b46e302e6ed30e72ece1680767d00fc4241f2d5.tar.bz2 |
make product-graph now filtered
Change-Id: I6bd93a87902e20a24c1c58152fb578ef1f4cb208
Diffstat (limited to 'tools/filter-product-graph.py')
-rwxr-xr-x | tools/filter-product-graph.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tools/filter-product-graph.py b/tools/filter-product-graph.py new file mode 100755 index 0000000..b3a5b42 --- /dev/null +++ b/tools/filter-product-graph.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# vim: ts=2 sw=2 nocindent + +import re +import sys + +def choose_regex(regs, line): + for func,reg in regs: + m = reg.match(line) + if m: + return (func,m) + return (None,None) + +def gather(included, deps): + result = set() + for inc in included: + result.add(inc) + for d in deps: + if inc == d[1]: + result.add(d[0]) + return result + +def main(): + deps = [] + infos = [] + def dependency(m): + deps.append((m.group(1), m.group(2))) + def info(m): + infos.append((m.group(1), m.group(2))) + + REGS = [ + (dependency, re.compile(r'"(.*)"\s*->\s*"(.*)"')), + (info, re.compile(r'"(.*)"(\s*\[.*\])')), + ] + + lines = sys.stdin.readlines() + lines = [line.strip() for line in lines] + + for line in lines: + func,m = choose_regex(REGS, line) + if func: + func(m) + + # filter + sys.stderr.write("argv: " + str(sys.argv) + "\n") + if not (len(sys.argv) == 2 and sys.argv[1] == "--all"): + targets = sys.argv[1:] + + included = set(targets) + prevLen = -1 + while prevLen != len(included): + prevLen = len(included) + included = gather(included, deps) + + deps = [dep for dep in deps if dep[1] in included] + infos = [info for info in infos if info[0] in included] + + print "digraph {" + print "graph [ ratio=.5 ];" + for dep in deps: + print '"%s" -> "%s"' % dep + for info in infos: + print '"%s"%s' % info + print "}" + + +if __name__ == "__main__": + main() |