10 def __init__(self, tgt):
16 def add(self, prereq):
17 self.prereqs.add(prereq)
26 def add(self, tgt, prereq):
27 t = self.lines.get(tgt)
31 p = self.lines.get(prereq)
33 p = Dependency(prereq)
34 self.lines[prereq] = p
36 self.count = self.count + 1
38 def setPos(self, tgt, pos):
39 t = self.lines.get(tgt)
46 if self.lines.has_key(tgt):
47 return self.lines[tgt]
52 return self.lines.iteritems()
54 def trace(self, tgt, prereq):
55 self.__visit = self.__visit + 1
56 d = self.lines.get(tgt)
59 return self.__trace(d, prereq)
61 def __trace(self, d, prereq):
62 if d.visit == self.__visit:
66 d.visit = self.__visit
69 recursed = self.__trace(pre, prereq)
71 result.append([ d ] + r)
77 print " dep TARGET Print the prerequisites for TARGET"
78 print " trace TARGET PREREQ Print the paths from TARGET to PREREQ"
82 opts = optparse.OptionParser()
83 opts.add_option("-i", "--interactive", action="store_true", dest="interactive",
84 help="Interactive mode")
85 (options, args) = opts.parse_args()
90 print "Reading %s" % filename
98 pos,tgt = line.rsplit(":", 1)
101 deps.setPos(tgt, pos)
103 (tgt,prereq) = line.split(':', 1)
105 prereq = prereq.strip()
106 deps.add(tgt, prereq)
109 print "Read %d dependencies. %d targets." % (deps.count, len(deps.lines))
111 line = raw_input("target> ")
116 if len(split) == 2 and cmd == "dep":
120 for prereq in d.prereqs:
122 elif len(split) == 3 and cmd == "trace":
126 print "from %s to %s" % (tgt, prereq)
127 trace = deps.trace(tgt, prereq)
132 if len(t.tgt) > width:
137 print t.tgt, " " * (width-len(t.tgt)), " #", t.pos
144 if __name__ == "__main__":
147 except KeyboardInterrupt: