On Tue, Dec 18, 2012 at 3:28 PM, Richard Purdie <richard.pur...@linuxfoundation.org> wrote: > On Tue, 2012-12-18 at 11:18 -0600, Matthew McClintock wrote: >> From: Christopher Larson <chris_lar...@mentor.com> >> >> Currently, command.py can return an error message from runCommand, due to >> being unable to run the command, yet few of our UIs (just hob) can handle it >> today. This can result in seeing a TypeError with traceback in certain rare >> circumstances. >> >> To resolve this, we need a clean way to get errors back from runCommand, >> without having to isinstance() the return value. This implements such a thing >> by making runCommand also return an error (or None if no error occurred). >> >> As runCommand now has a method of returning errors, we can also alter the >> getCmdLineAction bits such that the returned value is just the action, not an >> additional message. If a sync command wants to return an error, it raises >> CommandError(message), and the message will be passed to the caller >> appropriately. >> >> Example Usage: >> >> result, error = server.runCommand(...) >> if error: >> log.error('Unable to run command: %s' % error) >> return 1 >> >> (Bitbake rev: 717831b8315cb3904d9b590e633000bc897e8fb6) > > This patch has bugs in it. See recent fixes in master. > >> Signed-off-by: Christopher Larson <chris_lar...@mentor.com> >> Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org> >> --- >> bitbake/lib/bb/command.py | 43 +++++++++++++++---------- >> bitbake/lib/bb/server/process.py | 2 +- >> bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 5 ++- >> bitbake/lib/bb/ui/depexp.py | 38 ++++++++++++++-------- >> bitbake/lib/bb/ui/goggle.py | 17 +++++----- >> bitbake/lib/bb/ui/knotty.py | 45 >> ++++++++++++++++++--------- >> bitbake/lib/bb/ui/ncurses.py | 21 ++++++++----- >> 7 files changed, 112 insertions(+), 59 deletions(-) >> >> diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py >> index fd8912a..00b854e 100644 >> --- a/bitbake/lib/bb/command.py >> +++ b/bitbake/lib/bb/command.py >> @@ -44,6 +44,9 @@ class CommandFailed(CommandExit): >> self.error = message >> CommandExit.__init__(self, 1) >> >> +class CommandError(Exception): >> + pass >> + >> class Command: >> """ >> A queue of asynchronous commands for bitbake >> @@ -57,21 +60,25 @@ class Command: >> self.currentAsyncCommand = None >> >> def runCommand(self, commandline): >> - try: >> - command = commandline.pop(0) >> - if command in CommandsSync.__dict__: >> - # Can run synchronous commands straight away >> - return getattr(CommandsSync, command)(self.cmds_sync, self, >> commandline) >> - if self.currentAsyncCommand is not None: >> - return "Busy (%s in progress)" % self.currentAsyncCommand[0] >> - if command not in CommandsAsync.__dict__: >> - return "No such command" >> - self.currentAsyncCommand = (command, commandline) >> - self.cooker.server_registration_cb(self.cooker.runCommands, >> self.cooker) >> - return True >> - except: >> - import traceback >> - return traceback.format_exc() >> + command = commandline.pop(0) >> + if hasattr(CommandsSync, command): >> + # Can run synchronous commands straight away >> + command_method = getattr(self.cmds_sync, command) >> + try: >> + result = command_method(self, commandline) >> + except CommandError as exc: >> + return None, exc.args[0] >> + except Exception: >> + return None, traceback.format_exc() > > Missing import traceback. > >> + else: >> + return result, None >> + if self.currentAsyncCommand is not None: >> + return None, "Busy (%s in progress)" % >> self.currentAsyncCommand[0] >> + if command not in CommandsAsync.__dict__: >> + return None, "No such command" >> + self.currentAsyncCommand = (command, commandline) >> + self.cooker.server_registration_cb(self.cooker.runCommands, >> self.cooker) >> + return True, None >> >> def runAsyncCommand(self): >> try: >> @@ -139,7 +146,11 @@ class CommandsSync: >> """ >> Get any command parsed from the commandline >> """ >> - return command.cooker.commandlineAction >> + cmd_action = command.cooker.commandlineAction >> + if cmd_action['msg']: >> + raise CommandError(msg) > > Error, "msg" not defined.
Thanks, will look for these and add them / send to list as well. Look for another patch when I get to it. -M _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core