From 2e0ef25a50c6a31cd6de52dfb31a04b77e694da3 Mon Sep 17 00:00:00 2001 From: Bob Foerster Date: Fri, 17 Dec 2010 23:20:39 +0800 Subject: Resurrect alternative UIs The various alternative UIs have been updated to once again be functional with the latest bitbake internals. Each of the UIs still have much room for functional improvement. In particular, they have been updated to: - interact with the new process based server - handle the current set of events and notifications fired from the server and its associated subsystems (Bitbake rev: b947e7aa405966262c0614cae02e7978ec637095) Signed-off-by: Bob Foerster Signed-off-by: Richard Purdie --- bitbake/lib/bb/ui/depexp.py | 66 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 12 deletions(-) (limited to 'bitbake/lib/bb/ui/depexp.py') 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") -- cgit v1.2.3-54-g00ecf