Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: tools/graphviz.py

Issue 1454433002: Python 3 compatibility Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Rebase with master (4ec6c4e3a94bd04a6da2858163d40b2429b8aad1) Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 2
3 # Copyright (c) 2011 Google Inc. All rights reserved. 3 # Copyright (c) 2011 Google Inc. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Using the JSON dumped by the dump-dependency-json generator, 7 """Using the JSON dumped by the dump-dependency-json generator,
8 generate input suitable for graphviz to render a dependency graph of 8 generate input suitable for graphviz to render a dependency graph of
9 targets.""" 9 targets."""
10 10
11 from __future__ import print_function
12
11 import collections 13 import collections
12 import json 14 import json
13 import sys 15 import sys
14 16
15 17
16 def ParseTarget(target): 18 def ParseTarget(target):
17 target, _, suffix = target.partition('#') 19 target, _, suffix = target.partition('#')
18 filename, _, target = target.partition(':') 20 filename, _, target = target.partition(':')
19 return filename, target, suffix 21 return filename, target, suffix
20 22
(...skipping 22 matching lines...) Expand all
43 def WriteGraph(edges): 45 def WriteGraph(edges):
44 """Print a graphviz graph to stdout. 46 """Print a graphviz graph to stdout.
45 |edges| is a map of target to a list of other targets it depends on.""" 47 |edges| is a map of target to a list of other targets it depends on."""
46 48
47 # Bucket targets by file. 49 # Bucket targets by file.
48 files = collections.defaultdict(list) 50 files = collections.defaultdict(list)
49 for src, dst in edges.items(): 51 for src, dst in edges.items():
50 build_file, target_name, toolset = ParseTarget(src) 52 build_file, target_name, toolset = ParseTarget(src)
51 files[build_file].append(src) 53 files[build_file].append(src)
52 54
53 print 'digraph D {' 55 print('digraph D {')
54 print ' fontsize=8' # Used by subgraphs. 56 print(' fontsize=8') # Used by subgraphs.
55 print ' node [fontsize=8]' 57 print(' node [fontsize=8]')
56 58
57 # Output nodes by file. We must first write out each node within 59 # Output nodes by file. We must first write out each node within
58 # its file grouping before writing out any edges that may refer 60 # its file grouping before writing out any edges that may refer
59 # to those nodes. 61 # to those nodes.
60 for filename, targets in files.items(): 62 for filename, targets in files.items():
61 if len(targets) == 1: 63 if len(targets) == 1:
62 # If there's only one node for this file, simplify 64 # If there's only one node for this file, simplify
63 # the display by making it a box without an internal node. 65 # the display by making it a box without an internal node.
64 target = targets[0] 66 target = targets[0]
65 build_file, target_name, toolset = ParseTarget(target) 67 build_file, target_name, toolset = ParseTarget(target)
66 print ' "%s" [shape=box, label="%s\\n%s"]' % (target, filename, 68 print(' "%s" [shape=box, label="%s\\n%s"]' % (target, filename,
67 target_name) 69 target_name))
68 else: 70 else:
69 # Group multiple nodes together in a subgraph. 71 # Group multiple nodes together in a subgraph.
70 print ' subgraph "cluster_%s" {' % filename 72 print(' subgraph "cluster_%s" {' % filename)
71 print ' label = "%s"' % filename 73 print(' label = "%s"' % filename)
72 for target in targets: 74 for target in targets:
73 build_file, target_name, toolset = ParseTarget(target) 75 build_file, target_name, toolset = ParseTarget(target)
74 print ' "%s" [label="%s"]' % (target, target_name) 76 print(' "%s" [label="%s"]' % (target, target_name))
75 print ' }' 77 print(' }')
76 78
77 # Now that we've placed all the nodes within subgraphs, output all 79 # Now that we've placed all the nodes within subgraphs, output all
78 # the edges between nodes. 80 # the edges between nodes.
79 for src, dsts in edges.items(): 81 for src, dsts in edges.items():
80 for dst in dsts: 82 for dst in dsts:
81 print ' "%s" -> "%s"' % (src, dst) 83 print(' "%s" -> "%s"' % (src, dst))
82 84
83 print '}' 85 print('}')
84 86
85 87
86 def main(): 88 def main():
87 if len(sys.argv) < 2: 89 if len(sys.argv) < 2:
88 print >>sys.stderr, __doc__ 90 print(__doc__, file=sys.stderr)
89 print >>sys.stderr 91 print(file=sys.stderr)
90 print >>sys.stderr, 'usage: %s target1 target2...' % (sys.argv[0]) 92 print('usage: %s target1 target2...' % (sys.argv[0]), file=sys.stderr)
91 return 1 93 return 1
92 94
93 edges = LoadEdges('dump.json', sys.argv[1:]) 95 edges = LoadEdges('dump.json', sys.argv[1:])
94 96
95 WriteGraph(edges) 97 WriteGraph(edges)
96 return 0 98 return 0
97 99
98 100
99 if __name__ == '__main__': 101 if __name__ == '__main__':
100 sys.exit(main()) 102 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698