From 21bb330f4632ae9e8dd9eaff2879bcd24f9cf194 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Wed, 19 Jul 2017 11:56:03 +0200 Subject: bitbake: lib/bb/event: refactor printing events We really ought to have just one place where the string representation of these events is produced. This doesn't take any real control away from the UI - if an alternative representation is desired, that can still be made. (Bitbake rev: cb15db2a799be6d8eab9a2a43a9a573f89229cff) Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- bitbake/lib/bb/command.py | 2 ++ bitbake/lib/bb/event.py | 32 ++++++++++++++++++++++++++++++++ bitbake/lib/bb/runqueue.py | 6 ++++++ bitbake/lib/bb/ui/knotty.py | 37 ++++++------------------------------- bitbake/lib/bb/ui/ncurses.py | 2 +- bitbake/lib/bb/ui/taskexp.py | 20 ++------------------ bitbake/lib/bb/ui/toasterui.py | 25 ++++--------------------- 7 files changed, 53 insertions(+), 71 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index c06ab072ad..05803d6af0 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py @@ -50,6 +50,8 @@ class CommandFailed(CommandExit): def __init__(self, message): self.error = message CommandExit.__init__(self, 1) + def __str__(self): + return "Command execution failed: %s" % self.error class CommandError(Exception): pass diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 92ee3e92d4..59cca61424 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -521,6 +521,28 @@ class NoProvider(Event): def isRuntime(self): return self._runtime + def __str__(self): + msg = '' + if self._runtime: + r = "R" + else: + r = "" + + extra = '' + if not self._reasons: + if self._close_matches: + extra = ". Close matches:\n %s" % '\n '.join(self._close_matches) + + if self._dependees: + msg = "Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s" % (r, self._item, ", ".join(self._dependees), r, extra) + else: + msg = "Nothing %sPROVIDES '%s'%s" % (r, self._item, extra) + if self._reasons: + for reason in self._reasons: + msg += '\n' + reason + return msg + + class MultipleProviders(Event): """Multiple Providers""" @@ -548,6 +570,16 @@ class MultipleProviders(Event): """ return self._candidates + def __str__(self): + msg = "Multiple providers are available for %s%s (%s)" % (self._is_runtime and "runtime " or "", + self._item, + ", ".join(self._candidates)) + rtime = "" + if self._is_runtime: + rtime = "R" + msg += "\nConsider defining a PREFERRED_%sPROVIDER entry to match %s" % (rtime, self._item) + return msg + class ParseStarted(OperationStarted): """Recipe parsing for the runqueue has begun""" def __init__(self, total): diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 21520d3d6a..7dd964d1c4 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -2488,6 +2488,9 @@ class runQueueTaskFailed(runQueueEvent): runQueueEvent.__init__(self, task, stats, rq) self.exitcode = exitcode + def __str__(self): + return "Task (%s) failed with exit code '%s'" % (self.taskstring, self.exitcode) + class sceneQueueTaskFailed(sceneQueueEvent): """ Event notifying a setscene task failed @@ -2496,6 +2499,9 @@ class sceneQueueTaskFailed(sceneQueueEvent): sceneQueueEvent.__init__(self, task, stats, rq) self.exitcode = exitcode + def __str__(self): + return "Setscene task (%s) failed with exit code '%s' - real task will be run instead" % (self.taskstring, self.exitcode) + class sceneQueueComplete(sceneQueueEvent): """ Event when all the sceneQueue tasks are complete diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 1aa5ebb287..c3019822c4 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -560,7 +560,7 @@ def main(server, eventHandler, params, tf = TerminalFilter): return_value = event.exitcode if event.error: errors = errors + 1 - logger.error("Command execution failed: %s", event.error) + logger.error(str(event)) main.shutdown = 2 continue if isinstance(event, bb.command.CommandExit): @@ -571,39 +571,16 @@ def main(server, eventHandler, params, tf = TerminalFilter): main.shutdown = 2 continue if isinstance(event, bb.event.MultipleProviders): - logger.info("multiple providers are available for %s%s (%s)", event._is_runtime and "runtime " or "", - event._item, - ", ".join(event._candidates)) - rtime = "" - if event._is_runtime: - rtime = "R" - logger.info("consider defining a PREFERRED_%sPROVIDER entry to match %s" % (rtime, event._item)) + logger.info(str(event)) continue if isinstance(event, bb.event.NoProvider): - if event._runtime: - r = "R" - else: - r = "" - - extra = '' - if not event._reasons: - if event._close_matches: - extra = ". Close matches:\n %s" % '\n '.join(event._close_matches) - # For universe builds, only show these as warnings, not errors - h = logger.warning if not universe: return_value = 1 errors = errors + 1 - h = logger.error - - if event._dependees: - h("Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s", r, event._item, ", ".join(event._dependees), r, extra) + logger.error(str(event)) else: - h("Nothing %sPROVIDES '%s'%s", r, event._item, extra) - if event._reasons: - for reason in event._reasons: - h("%s", reason) + logger.warning(str(event)) continue if isinstance(event, bb.runqueue.sceneQueueTaskStarted): @@ -625,13 +602,11 @@ def main(server, eventHandler, params, tf = TerminalFilter): if isinstance(event, bb.runqueue.runQueueTaskFailed): return_value = 1 taskfailures.append(event.taskstring) - logger.error("Task (%s) failed with exit code '%s'", - event.taskstring, event.exitcode) + logger.error(str(event)) continue if isinstance(event, bb.runqueue.sceneQueueTaskFailed): - logger.warning("Setscene task (%s) failed with exit code '%s' - real task will be run instead", - event.taskstring, event.exitcode) + logger.warning(str(event)) continue if isinstance(event, bb.event.DepTreeGenerated): diff --git a/bitbake/lib/bb/ui/ncurses.py b/bitbake/lib/bb/ui/ncurses.py index ca845a32ad..8690c529cc 100644 --- a/bitbake/lib/bb/ui/ncurses.py +++ b/bitbake/lib/bb/ui/ncurses.py @@ -315,7 +315,7 @@ class NCursesUI: # also allow them to now exit with a single ^C shutdown = 2 if isinstance(event, bb.command.CommandFailed): - mw.appendText("Command execution failed: %s" % event.error) + mw.appendText(str(event)) time.sleep(2) exitflag = True if isinstance(event, bb.command.CommandExit): diff --git a/bitbake/lib/bb/ui/taskexp.py b/bitbake/lib/bb/ui/taskexp.py index 9d14ecefaf..0d0f9f5a40 100644 --- a/bitbake/lib/bb/ui/taskexp.py +++ b/bitbake/lib/bb/ui/taskexp.py @@ -286,23 +286,7 @@ def main(server, eventHandler, params): continue if isinstance(event, bb.event.NoProvider): - if event._runtime: - r = "R" - else: - r = "" - - extra = '' - if not event._reasons: - if event._close_matches: - extra = ". Close matches:\n %s" % '\n '.join(event._close_matches) - - if event._dependees: - print("Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)%s" % (r, event._item, ", ".join(event._dependees), r, extra)) - else: - print("Nothing %sPROVIDES '%s'%s" % (r, event._item, extra)) - if event._reasons: - for reason in event._reasons: - print(reason) + print(str(event)) _, error = server.runCommand(["stateShutdown"]) if error: @@ -310,7 +294,7 @@ def main(server, eventHandler, params): break if isinstance(event, bb.command.CommandFailed): - print("Command execution failed: %s" % event.error) + print(str(event)) return event.exitcode if isinstance(event, bb.command.CommandExit): diff --git a/bitbake/lib/bb/ui/toasterui.py b/bitbake/lib/bb/ui/toasterui.py index 71f04fa5ce..88cec37592 100644 --- a/bitbake/lib/bb/ui/toasterui.py +++ b/bitbake/lib/bb/ui/toasterui.py @@ -320,29 +320,13 @@ def main(server, eventHandler, params): if isinstance(event, bb.event.CacheLoadCompleted): continue if isinstance(event, bb.event.MultipleProviders): - logger.info("multiple providers are available for %s%s (%s)", event._is_runtime and "runtime " or "", - event._item, - ", ".join(event._candidates)) - logger.info("consider defining a PREFERRED_PROVIDER entry to match %s", event._item) + logger.info(str(event)) continue if isinstance(event, bb.event.NoProvider): errors = errors + 1 - if event._runtime: - r = "R" - else: - r = "" - - if event._dependees: - text = "Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)" % (r, event._item, ", ".join(event._dependees), r) - else: - text = "Nothing %sPROVIDES '%s'" % (r, event._item) - + text = str(event) logger.error(text) - if event._reasons: - for reason in event._reasons: - logger.error("%s", reason) - text += reason buildinfohelper.store_log_error(text) continue @@ -364,8 +348,7 @@ def main(server, eventHandler, params): if isinstance(event, bb.runqueue.runQueueTaskFailed): buildinfohelper.update_and_store_task(event) taskfailures.append(event.taskstring) - logger.error("Task (%s) failed with exit code '%s'", - event.taskstring, event.exitcode) + logger.error(str(event)) continue if isinstance(event, (bb.runqueue.sceneQueueTaskCompleted, bb.runqueue.sceneQueueTaskFailed)): @@ -382,7 +365,7 @@ def main(server, eventHandler, params): if isinstance(event, bb.command.CommandFailed): errors += 1 errorcode = 1 - logger.error("Command execution failed: %s", event.error) + logger.error(str(event)) elif isinstance(event, bb.event.BuildCompleted): buildinfohelper.scan_image_artifacts() buildinfohelper.clone_required_sdk_artifacts() -- cgit v1.2.3-54-g00ecf