From 98ac5e4e6230095487b819b911890ec64e28d5f7 Mon Sep 17 00:00:00 2001 From: Jason Wessel Date: Mon, 17 Sep 2012 17:43:49 -0500 Subject: bitbake: event.py, knotty.py, ncurses.py, runningbuild.py: Add support for LogExecTTY event The LogExecTTY even is intended to provide the ability to spawn a task on a the controlling tty, if a tty is availble. When a controlling tty is not availble the previous behavior is preserved where a warning is issued about the action an end user must execute. All the available UI's were tested against the new event type. This feature is primarily intended for hooking up a screen client session automatically on the controlling tty to allow for a more streamlined end user experience when using a pure command line driven environment. The changes that send the LogExecTTY event are in the oe-core side. (Bitbake rev: cffe80d82a46aaf52ff4a7b6409435754043553f) Signed-off-by: Jason Wessel Signed-off-by: Richard Purdie --- bitbake/lib/bb/event.py | 9 +++++++++ bitbake/lib/bb/ui/crumbs/runningbuild.py | 15 +++++++++++++++ bitbake/lib/bb/ui/knotty.py | 19 +++++++++++++++++++ bitbake/lib/bb/ui/ncurses.py | 2 ++ 4 files changed, 45 insertions(+) diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 7ee28fcfcb..deb1c21595 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -510,6 +510,15 @@ class MsgFatal(MsgBase): class MsgPlain(MsgBase): """General output""" +class LogExecTTY(Event): + """Send event containing program to spawn on tty of the logger""" + def __init__(self, msg, prog, sleep_delay, retries): + Event.__init__(self) + self.msg = msg + self.prog = prog + self.sleep_delay = sleep_delay + self.retries = retries + class LogHandler(logging.Handler): """Dispatch logging messages as bitbake events""" diff --git a/bitbake/lib/bb/ui/crumbs/runningbuild.py b/bitbake/lib/bb/ui/crumbs/runningbuild.py index a57d6db5e5..700fd65015 100644 --- a/bitbake/lib/bb/ui/crumbs/runningbuild.py +++ b/bitbake/lib/bb/ui/crumbs/runningbuild.py @@ -375,6 +375,21 @@ class RunningBuild (gobject.GObject): msg += ("%s\n" % reason) self.emit("no-provider", msg) self.emit("log", msg) + elif isinstance(event, bb.event.LogExecTTY): + icon = "dialog-warning" + color = HobColors.WARNING + if self.sequential or not parent: + tree_add = self.model.append + else: + tree_add = self.model.prepend + tree_add(parent, + (None, + package, + task, + event.msg, + icon, + color, + 0)) else: if not isinstance(event, (bb.event.BuildBase, bb.event.StampUpdate, diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 858cacfe55..d81ad5d540 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -27,6 +27,7 @@ import logging import progressbar import signal import bb.msg +import time import fcntl import struct import copy @@ -216,6 +217,10 @@ def main(server, eventHandler, tf = TerminalFilter): includelogs = server.runCommand(["getVariable", "BBINCLUDELOGS"]) loglines = server.runCommand(["getVariable", "BBINCLUDELOGS_LINES"]) consolelogfile = server.runCommand(["getVariable", "BB_CONSOLELOG"]) + if sys.stdin.isatty() and sys.stdout.isatty(): + log_exec_tty = True + else: + log_exec_tty = False helper = uihelper.BBUIHelper() @@ -271,6 +276,20 @@ def main(server, eventHandler, tf = TerminalFilter): if not main.shutdown: main.shutdown = 1 + if isinstance(event, bb.event.LogExecTTY): + if log_exec_tty: + tries = event.retries + while tries: + print "Trying to run: %s" % event.prog + if os.system(event.prog) == 0: + break + time.sleep(event.sleep_delay) + tries -= 1 + if tries: + continue + logger.warn(event.msg) + continue + if isinstance(event, logging.LogRecord): if event.levelno >= format.ERROR: errors = errors + 1 diff --git a/bitbake/lib/bb/ui/ncurses.py b/bitbake/lib/bb/ui/ncurses.py index f573b95574..f6ea7f9bca 100644 --- a/bitbake/lib/bb/ui/ncurses.py +++ b/bitbake/lib/bb/ui/ncurses.py @@ -318,6 +318,8 @@ class NCursesUI: if isinstance(event, bb.cooker.CookerExit): exitflag = True + if isinstance(event, bb.event.LogExecTTY): + mw.appendText('WARN: ' + event.msg + '\n') if helper.needUpdate: activetasks, failedtasks = helper.getTasks() taw.erase() -- cgit v1.2.3-54-g00ecf