summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/ui/depexp.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/ui/depexp.py')
-rw-r--r--bitbake/lib/bb/ui/depexp.py66
1 files changed, 54 insertions, 12 deletions
diff --git a/bitbake/lib/bb/ui/depexp.py b/bitbake/lib/bb/ui/depexp.py
index 48f6f792db..66ef96cdbc 100644
--- a/bitbake/lib/bb/ui/depexp.py
+++ b/bitbake/lib/bb/ui/depexp.py
@@ -19,6 +19,7 @@
19 19
20import gobject 20import gobject
21import gtk 21import gtk
22import Queue
22import threading 23import threading
23import xmlrpclib 24import xmlrpclib
24import bb 25import bb
@@ -32,6 +33,7 @@ from bb.ui.crumbs.progress import ProgressBar
32(TYPE_DEP, TYPE_RDEP) = (0, 1) 33(TYPE_DEP, TYPE_RDEP) = (0, 1)
33(COL_DEP_TYPE, COL_DEP_PARENT, COL_DEP_PACKAGE) = (0, 1, 2) 34(COL_DEP_TYPE, COL_DEP_PARENT, COL_DEP_PACKAGE) = (0, 1, 2)
34 35
36
35class PackageDepView(gtk.TreeView): 37class PackageDepView(gtk.TreeView):
36 def __init__(self, model, dep_type, label): 38 def __init__(self, model, dep_type, label):
37 gtk.TreeView.__init__(self) 39 gtk.TreeView.__init__(self)
@@ -52,6 +54,7 @@ class PackageDepView(gtk.TreeView):
52 self.current = package 54 self.current = package
53 self.filter_model.refilter() 55 self.filter_model.refilter()
54 56
57
55class PackageReverseDepView(gtk.TreeView): 58class PackageReverseDepView(gtk.TreeView):
56 def __init__(self, model, label): 59 def __init__(self, model, label):
57 gtk.TreeView.__init__(self) 60 gtk.TreeView.__init__(self)
@@ -69,6 +72,7 @@ class PackageReverseDepView(gtk.TreeView):
69 self.current = package 72 self.current = package
70 self.filter_model.refilter() 73 self.filter_model.refilter()
71 74
75
72class DepExplorer(gtk.Window): 76class DepExplorer(gtk.Window):
73 def __init__(self): 77 def __init__(self):
74 gtk.Window.__init__(self) 78 gtk.Window.__init__(self)
@@ -90,9 +94,12 @@ class DepExplorer(gtk.Window):
90 scrolled = gtk.ScrolledWindow() 94 scrolled = gtk.ScrolledWindow()
91 scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 95 scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
92 scrolled.set_shadow_type(gtk.SHADOW_IN) 96 scrolled.set_shadow_type(gtk.SHADOW_IN)
97
93 self.pkg_treeview = gtk.TreeView(self.pkg_model) 98 self.pkg_treeview = gtk.TreeView(self.pkg_model)
94 self.pkg_treeview.get_selection().connect("changed", self.on_cursor_changed) 99 self.pkg_treeview.get_selection().connect("changed", self.on_cursor_changed)
95 self.pkg_treeview.append_column(gtk.TreeViewColumn("Package", gtk.CellRendererText(), text=COL_PKG_NAME)) 100 column = gtk.TreeViewColumn("Package", gtk.CellRendererText(), text=COL_PKG_NAME)
101 self.pkg_treeview.append_column(column)
102 column.set_sort_column_id(COL_PKG_NAME)
96 pane.add1(scrolled) 103 pane.add1(scrolled)
97 scrolled.add(self.pkg_treeview) 104 scrolled.add(self.pkg_treeview)
98 105
@@ -158,7 +165,6 @@ class DepExplorer(gtk.Window):
158 165
159 166
160def parse(depgraph, pkg_model, depends_model): 167def parse(depgraph, pkg_model, depends_model):
161
162 for package in depgraph["pn"]: 168 for package in depgraph["pn"]:
163 pkg_model.set(pkg_model.append(), COL_PKG_NAME, package) 169 pkg_model.set(pkg_model.append(), COL_PKG_NAME, package)
164 170
@@ -176,6 +182,7 @@ def parse(depgraph, pkg_model, depends_model):
176 COL_DEP_PARENT, package, 182 COL_DEP_PARENT, package,
177 COL_DEP_PACKAGE, rdepend) 183 COL_DEP_PACKAGE, rdepend)
178 184
185
179class gtkthread(threading.Thread): 186class gtkthread(threading.Thread):
180 quit = threading.Event() 187 quit = threading.Event()
181 def __init__(self, shutdown): 188 def __init__(self, shutdown):
@@ -189,8 +196,8 @@ class gtkthread(threading.Thread):
189 gtk.main() 196 gtk.main()
190 gtkthread.quit.set() 197 gtkthread.quit.set()
191 198
192def main(server, eventHandler):
193 199
200def main(server, eventHandler):
194 try: 201 try:
195 cmdline = server.runCommand(["getCmdLineAction"]) 202 cmdline = server.runCommand(["getCmdLineAction"])
196 if not cmdline or cmdline[0] != "generateDotGraph": 203 if not cmdline or cmdline[0] != "generateDotGraph":
@@ -214,25 +221,54 @@ def main(server, eventHandler):
214 pbar = ProgressBar(dep) 221 pbar = ProgressBar(dep)
215 gtk.gdk.threads_leave() 222 gtk.gdk.threads_leave()
216 223
224 progress_total = 0
217 while True: 225 while True:
218 try: 226 try:
219 event = eventHandler.waitEvent(0.25) 227 event = eventHandler.waitEvent(0.25)
220 if gtkthread.quit.isSet(): 228 if gtkthread.quit.isSet():
229 server.runCommand(["stateStop"])
221 break 230 break
222 231
223 if event is None: 232 if event is None:
224 continue 233 continue
234
235 if isinstance(event, bb.event.CacheLoadStarted):
236 progress_total = event.total
237 gtk.gdk.threads_enter()
238 pbar.set_title("Loading Cache")
239 pbar.update(0, progress_total)
240 gtk.gdk.threads_leave()
241
242 if isinstance(event, bb.event.CacheLoadProgress):
243 x = event.current
244 gtk.gdk.threads_enter()
245 pbar.update(x, progress_total)
246 gtk.gdk.threads_leave()
247 continue
248
249 if isinstance(event, bb.event.CacheLoadCompleted):
250 gtk.gdk.threads_enter()
251 pbar.update(progress_total, progress_total)
252 gtk.gdk.threads_leave()
253 continue
254
255 if isinstance(event, bb.event.ParseStarted):
256 progress_total = event.total
257 gtk.gdk.threads_enter()
258 pbar.set_title("Processing recipes")
259 pbar.update(0, progress_total)
260 gtk.gdk.threads_leave()
261
225 if isinstance(event, bb.event.ParseProgress): 262 if isinstance(event, bb.event.ParseProgress):
226 x = event.sofar 263 x = event.current
227 y = event.total
228 if x == y:
229 print(("\nParsing finished. %d cached, %d parsed, %d skipped, %d masked, %d errors."
230 % ( event.cached, event.parsed, event.skipped, event.masked, event.errors)))
231 pbar.hide()
232 continue
233 gtk.gdk.threads_enter() 264 gtk.gdk.threads_enter()
234 pbar.update(x, y) 265 pbar.update(x, progress_total)
235 gtk.gdk.threads_leave() 266 gtk.gdk.threads_leave()
267
268 continue
269
270 if isinstance(event, bb.event.ParseCompleted):
271 pbar.hide()
236 continue 272 continue
237 273
238 if isinstance(event, bb.event.DepTreeGenerated): 274 if isinstance(event, bb.event.DepTreeGenerated):
@@ -242,16 +278,22 @@ def main(server, eventHandler):
242 278
243 if isinstance(event, bb.command.CommandCompleted): 279 if isinstance(event, bb.command.CommandCompleted):
244 continue 280 continue
281
245 if isinstance(event, bb.command.CommandFailed): 282 if isinstance(event, bb.command.CommandFailed):
246 print("Command execution failed: %s" % event.error) 283 print("Command execution failed: %s" % event.error)
247 return event.exitcode 284 return event.exitcode
285
248 if isinstance(event, bb.command.CommandExit): 286 if isinstance(event, bb.command.CommandExit):
249 return event.exitcode 287 return event.exitcode
288
250 if isinstance(event, bb.cooker.CookerExit): 289 if isinstance(event, bb.cooker.CookerExit):
251 break 290 break
252 291
253 continue 292 continue
254 293 except EnvironmentError as ioerror:
294 # ignore interrupted io
295 if ioerror.args[0] == 4:
296 pass
255 except KeyboardInterrupt: 297 except KeyboardInterrupt:
256 if shutdown == 2: 298 if shutdown == 2:
257 print("\nThird Keyboard Interrupt, exit.\n") 299 print("\nThird Keyboard Interrupt, exit.\n")