diff options
author | Bob Foerster <robert@erafx.com> | 2010-12-17 23:20:39 +0800 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2011-01-05 11:13:48 +0000 |
commit | 2e0ef25a50c6a31cd6de52dfb31a04b77e694da3 (patch) | |
tree | fee195184ef180928f6712b05c1ed223382a6c96 /bitbake/lib/bb/ui/depexp.py | |
parent | 25ac24e02e3e96945e8ac83e16fe27a6b24789b1 (diff) | |
download | openembedded-core-2e0ef25a50c6a31cd6de52dfb31a04b77e694da3.tar.gz openembedded-core-2e0ef25a50c6a31cd6de52dfb31a04b77e694da3.tar.bz2 openembedded-core-2e0ef25a50c6a31cd6de52dfb31a04b77e694da3.tar.xz openembedded-core-2e0ef25a50c6a31cd6de52dfb31a04b77e694da3.zip |
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 <robert@erafx.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
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 48f6f792d..66ef96cdb 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") |