author | Sverre Rabbelier <srabbelier@gmail.com> |
Thu, 27 Nov 2008 21:57:24 +0000 | |
changeset 597 | 66088092f849 |
parent 595 | 3c4d5b7d4391 |
child 598 | c1f9435bb645 |
permissions | -rwxr-xr-x |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
2 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
3 |
import sys |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
4 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
5 |
import cPickle |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
6 |
import os |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
7 |
import graph |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
8 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
9 |
def parseFile(file_name): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
10 |
if os.path.exists("imports.dat"): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
11 |
log = open("imports.dat", "r") |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
12 |
all_imports = cPickle.load(log) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
13 |
log.close() |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
14 |
else: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
15 |
all_imports = {} |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
16 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
17 |
if file_name in all_imports: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
18 |
print "Overwriting previous data on '%s'." % file_name |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
19 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
20 |
imports = [] |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
21 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
22 |
file = open(file_name) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
23 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
24 |
for line in file: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
25 |
if line.lstrip().startswith('import soc'): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
26 |
splitline = line[:-1].split(' ') |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
27 |
mod = splitline[1] |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
28 |
imports.append(mod) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
29 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
30 |
if line.lstrip().startswith('from soc'): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
31 |
splitline = line[:-1].split(' ') |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
32 |
mod = splitline[1] + '.' + splitline[3] |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
33 |
imports.append(mod) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
34 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
35 |
for idx, imp in enumerate(imports): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
36 |
if imp in set(imports[idx+1:]): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
37 |
print "Warning: file '%s' has a redundant import: '%s'." % (file_name, imp) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
38 |
|
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
39 |
if file_name.endswith("__init__.py"): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
40 |
normalized = file_name[:-12].replace('/', '.') |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
41 |
else: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
42 |
normalized = file_name[:-3].replace('/', '.') |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
43 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
44 |
print "Writing imports for file %s (%s)." % (file_name, normalized) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
45 |
all_imports[normalized] = imports |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
46 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
47 |
log = open("imports.dat", "w") |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
48 |
cPickle.dump(all_imports, log) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
49 |
log.close() |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
50 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
51 |
return 0 |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
52 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
53 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
54 |
def buildGraph(): |
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
55 |
import graph |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
56 |
|
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
57 |
log = open("imports.dat", "r") |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
58 |
all_imports = cPickle.load(log) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
59 |
|
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
60 |
gr = graph.digraph() |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
61 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
62 |
gr.add_nodes(all_imports.keys()) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
63 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
64 |
for file_name, imports in all_imports.iteritems(): |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
65 |
for imp in imports: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
66 |
gr.add_edge(file_name, imp) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
67 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
68 |
return gr |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
69 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
70 |
|
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
71 |
def showGraph(gr): |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
72 |
for node in gr: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
73 |
print "%s: " % node |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
74 |
for edge in gr[node]: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
75 |
print "\t%s" % edge |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
76 |
|
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
77 |
return 0 |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
78 |
|
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
79 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
80 |
def getParents(gst, target): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
81 |
parents = [] |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
82 |
current = target |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
83 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
84 |
while True: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
85 |
for node in gst: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
86 |
if current in gst[node]: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
87 |
parents.append(node) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
88 |
current = node |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
89 |
break |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
90 |
else: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
91 |
break |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
92 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
93 |
return parents |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
94 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
95 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
96 |
def pathFrom(parents, first, target): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
97 |
idx = parents.index(first) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
98 |
path = parents[idx::-1] |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
99 |
return [target] + path + [target] |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
100 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
101 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
102 |
def findCycle(gr, gst, target): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
103 |
parents = getParents(gst, target) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
104 |
cycles = [] |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
105 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
106 |
for node in gr[target]: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
107 |
if node in parents: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
108 |
cycles.append(pathFrom(parents, node, target)) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
109 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
110 |
return cycles |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
111 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
112 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
113 |
def findCycles(gr): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
114 |
st, pre, post = gr.depth_first_search() |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
115 |
gst = graph.digraph() |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
116 |
gst.add_spanning_tree(st) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
117 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
118 |
cycles = [] |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
119 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
120 |
for node in gr: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
121 |
cycles += findCycle(gr, gst, node) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
122 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
123 |
return cycles |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
124 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
125 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
126 |
def drawGraph(gr): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
127 |
st, pre, post = gr.depth_first_search() |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
128 |
gst = graph.digraph() |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
129 |
gst.add_spanning_tree(st) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
130 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
131 |
sys.path.append('/usr/lib/graphviz/python/') |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
132 |
import gv |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
133 |
dot = gst.write(fmt='dot') |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
134 |
gvv = gv.readstring(dot) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
135 |
gv.layout(gvv,'dot') |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
136 |
gv.render(gvv,'png','imports.png') |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
137 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
138 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
139 |
def main(args): |
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
140 |
if len(args) == 1 and args[0].startswith("."): |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
141 |
gr = buildGraph() |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
142 |
if args[0] == '.': |
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
143 |
return showGraph(gr) |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
144 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
145 |
if args[0] == '..': |
597
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
146 |
return drawGraph(gr) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
147 |
|
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
148 |
if args[0] == '...': |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
149 |
cycles = findCycles(gr) |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
150 |
for cycle in cycles: |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
151 |
print cycle |
66088092f849
Proper working implementation of a cycle detection algorithm, that
Sverre Rabbelier <srabbelier@gmail.com>
parents:
595
diff
changeset
|
152 |
return 0 |
595
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
153 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
154 |
if not args: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
155 |
print "Please specify a filename to parse, or '.' to list the parsed imports" |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
156 |
return -1 |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
157 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
158 |
res = 0 |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
159 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
160 |
for file_name in args: |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
161 |
res += parseFile(file_name) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
162 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
163 |
print "Done parsing." |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
164 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
165 |
return res |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
166 |
|
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
167 |
if __name__ == '__main__': |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
168 |
import sys |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
169 |
res = main(sys.argv[1:]) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
170 |
sys.exit(res) |
3c4d5b7d4391
Added rudementry include checker
Sverre Rabbelier <srabbelier@gmail.com>
parents:
diff
changeset
|
171 |