diff options
Diffstat (limited to 'bitbake/lib/bb/ui/depexp.py')
-rw-r--r-- | bitbake/lib/bb/ui/depexp.py | 66 |
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 @@ import gobject import gtk +import Queue import threading import xmlrpclib import bb @@ -32,6 +33,7 @@ from bb.ui.crumbs.progress import ProgressBar (TYPE_DEP, TYPE_RDEP) = (0, 1) (COL_DEP_TYPE, COL_DEP_PARENT, COL_DEP_PACKAGE) = (0, 1, 2) + class PackageDepView(gtk.TreeView): def __init__(self, model, dep_type, label): gtk.TreeView.__init__(self) @@ -52,6 +54,7 @@ class PackageDepView(gtk.TreeView): self.current = package self.filter_model.refilter() + class PackageReverseDepView(gtk.TreeView): def __init__(self, model, label): gtk.TreeView.__init__(self) @@ -69,6 +72,7 @@ class PackageReverseDepView(gtk.TreeView): self.current = package self.filter_model.refilter() + class DepExplorer(gtk.Window): def __init__(self): gtk.Window.__init__(self) @@ -90,9 +94,12 @@ class DepExplorer(gtk.Window): scrolled = gtk.ScrolledWindow() scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled.set_shadow_type(gtk.SHADOW_IN) + self.pkg_treeview = gtk.TreeView(self.pkg_model) self.pkg_treeview.get_selection().connect("changed", self.on_cursor_changed) - self.pkg_treeview.append_column(gtk.TreeViewColumn("Package", gtk.CellRendererText(), text=COL_PKG_NAME)) + column = gtk.TreeViewColumn("Package", gtk.CellRendererText(), text=COL_PKG_NAME) + self.pkg_treeview.append_column(column) + column.set_sort_column_id(COL_PKG_NAME) pane.add1(scrolled) scrolled.add(self.pkg_treeview) @@ -158,7 +165,6 @@ class DepExplorer(gtk.Window): def parse(depgraph, pkg_model, depends_model): - for package in depgraph["pn"]: pkg_model.set(pkg_model.append(), COL_PKG_NAME, package) @@ -176,6 +182,7 @@ def parse(depgraph, pkg_model, depends_model): COL_DEP_PARENT, package, COL_DEP_PACKAGE, rdepend) + class gtkthread(threading.Thread): quit = threading.Event() def __init__(self, shutdown): @@ -189,8 +196,8 @@ class gtkthread(threading.Thread): gtk.main() gtkthread.quit.set() -def main(server, eventHandler): +def main(server, eventHandler): try: cmdline = server.runCommand(["getCmdLineAction"]) if not cmdline or cmdline[0] != "generateDotGraph": @@ -214,25 +221,54 @@ def main(server, eventHandler): pbar = ProgressBar(dep) gtk.gdk.threads_leave() + progress_total = 0 while True: try: event = eventHandler.waitEvent(0.25) if gtkthread.quit.isSet(): + server.runCommand(["stateStop"]) break if event is None: continue + + if isinstance(event, bb.event.CacheLoadStarted): + progress_total = event.total + gtk.gdk.threads_enter() + pbar.set_title("Loading Cache") + pbar.update(0, progress_total) + gtk.gdk.threads_leave() + + if isinstance(event, bb.event.CacheLoadProgress): + x = event.current + gtk.gdk.threads_enter() + pbar.update(x, progress_total) + gtk.gdk.threads_leave() + continue + + if isinstance(event, bb.event.CacheLoadCompleted): + gtk.gdk.threads_enter() + pbar.update(progress_total, progress_total) + gtk.gdk.threads_leave() + continue + + if isinstance(event, bb.event.ParseStarted): + progress_total = event.total + gtk.gdk.threads_enter() + pbar.set_title("Processing recipes") + pbar.update(0, progress_total) + gtk.gdk.threads_leave() + if isinstance(event, bb.event.ParseProgress): - x = event.sofar - y = event.total - if x == y: - print(("\nParsing finished. %d cached, %d parsed, %d skipped, %d masked, %d errors." - % ( event.cached, event.parsed, event.skipped, event.masked, event.errors))) - pbar.hide() - continue + x = event.current gtk.gdk.threads_enter() - pbar.update(x, y) + pbar.update(x, progress_total) gtk.gdk.threads_leave() + + continue + + if isinstance(event, bb.event.ParseCompleted): + pbar.hide() continue if isinstance(event, bb.event.DepTreeGenerated): @@ -242,16 +278,22 @@ def main(server, eventHandler): if isinstance(event, bb.command.CommandCompleted): continue + if isinstance(event, bb.command.CommandFailed): print("Command execution failed: %s" % event.error) return event.exitcode + if isinstance(event, bb.command.CommandExit): return event.exitcode + if isinstance(event, bb.cooker.CookerExit): break continue - + except EnvironmentError as ioerror: + # ignore interrupted io + if ioerror.args[0] == 4: + pass except KeyboardInterrupt: if shutdown == 2: print("\nThird Keyboard Interrupt, exit.\n") |