[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