All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Matthew McClintock <msm@freescale.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [for-denzil] bitbake: command: add error to return of runCommand
Date: Tue, 18 Dec 2012 21:28:05 +0000	[thread overview]
Message-ID: <1355866085.18874.46.camel@ted> (raw)
In-Reply-To: <1355851135-31667-1-git-send-email-msm@freescale.com>

On Tue, 2012-12-18 at 11:18 -0600, Matthew McClintock wrote:
> From: Christopher Larson <chris_larson@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_larson@mentor.com>
> Signed-off-by: Richard Purdie <richard.purdie@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.

Cheers,

Richard




  reply	other threads:[~2012-12-18 21:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-18 17:18 [for-denzil] bitbake: command: add error to return of runCommand Matthew McClintock
2012-12-18 21:28 ` Richard Purdie [this message]
2012-12-19 19:01   ` McClintock Matthew-B29882
  -- strict thread matches above, loose matches on Subject: below --
2012-11-01 18:16 Matthew McClintock
2012-11-30  2:56 ` Scott Garman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1355866085.18874.46.camel@ted \
    --to=richard.purdie@linuxfoundation.org \
    --cc=msm@freescale.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.