[bitbake-devel] [PATCH] bitbake: Add BBHandledException exception class

Mark Hatle mark.hatle at windriver.com
Mon Jan 9 18:51:50 UTC 2012


I noticed a typo in the patch below..  Otherwise it looks fine.

On 1/9/12 11:01 AM, Richard Purdie wrote:
> We have a problem knowing when to show the user debug information and
> when not to since the code has already shown the user suitable information
> about why a failure is occurring.
>
> This patch adds a bb.BBHandledException exception class which can be used
> to identify those exceptions which don't need further explanation to
> the user.
>
> This patch uses this class for the bb.providers exceptions and ensures the
> command handling code correctly filters the exceptions meaning that
>
> "bitbake invalid"
>
> now shows an simple error message and not a python traceback.
>
> [YOCTO #1141 partial]
>
> Signed-off-by: Richard Purdie<richard.purdie at linuxfoundation.org>
> ---
> diff --git a/bitbake/lib/bb/__init__.py b/bitbake/lib/bb/__init__.py
> index 5dc959c..e410eea 100644
> --- a/bitbake/lib/bb/__init__.py
> +++ b/bitbake/lib/bb/__init__.py
> @@ -27,6 +27,18 @@ import sys
>   if sys.version_info<  (2, 6, 0):
>       raise RuntimeError("Sorry, python 2.6.0 or later is required for this version of bitbake")
>
> +
> +class BBHandledException(Exception):
> +    """
> +    The big dillema for generic bitbake code is what information to give the user

dilemma I think

> +    when an exception occurs. Any exception inheriting this base exception class
> +    has already provided information to the user via some 'fired' message type such as
> +    an explicitly fired event using bb.fire, or a bb.error message. If bitbake
> +    encounters an expception derived from this class, no backtrace or other information

exception

> +    will be given to the user, its assumed the earlier event provided the relavent information.

relevant

> +    """
> +    pass
> +
>   import os
>   import logging
>
> diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
> index f236dac..2a3a3af 100644
> --- a/bitbake/lib/bb/command.py
> +++ b/bitbake/lib/bb/command.py
> @@ -98,9 +98,12 @@ class Command:
>               else:
>                   self.finishAsyncCommand("Exited with %s" % arg)
>               return False
> -        except Exception:
> +        except Exception as exc:
>               import traceback
> -            self.finishAsyncCommand(traceback.format_exc())
> +            if isinstance(exc, bb.BBHandledException):
> +                self.finishAsyncCommand("")
> +            else:
> +                self.finishAsyncCommand(traceback.format_exc())
>               return False
>
>       def finishAsyncCommand(self, msg=None, code=None):
> diff --git a/bitbake/lib/bb/providers.py b/bitbake/lib/bb/providers.py
> index 4543447..398c8ea 100644
> --- a/bitbake/lib/bb/providers.py
> +++ b/bitbake/lib/bb/providers.py
> @@ -28,10 +28,10 @@ import bb
>
>   logger = logging.getLogger("BitBake.Provider")
>
> -class NoProvider(Exception):
> +class NoProvider(bb.BBHandledException):
>       """Exception raised when no provider of a build dependency can be found"""
>
> -class NoRProvider(Exception):
> +class NoRProvider(bb.BBHandledException):
>       """Exception raised when no provider of a runtime dependency can be found"""
>
>
>
>
>
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel





More information about the bitbake-devel mailing list