Patchwork [34/52] logging: add bb* logging mechanisms for bash recipe functions

login
register
mail settings
Submitter Saul Wold
Date April 27, 2011, 7:29 a.m.
Message ID <a34718a02b76e37c59ff67d9e182bd7b64c9f125.1303889119.git.sgw@linux.intel.com>
Download mbox | patch
Permalink /patch/2963/
State New, archived
Headers show

Comments

Saul Wold - April 27, 2011, 7:29 a.m.
From: Darren Hart <dvhart@linux.intel.com>

The following logging mechanisms are to be used in bash functions of recipes.
They are intended to map one to one in intention and output format with the
python recipe logging functions of a similar naming convention: bb.plain(),
bb.note(), etc.

For the time being, all of these print only to the task logs. Future
enhancements may integrate these calls with the bitbake logging infrastructure,
allowing for printing to the console as appropriate. The interface and intention
statements reflect that future goal. Once it is in place, no changes will be
necessary to recipes using these logging mechanisms.

I opted to write new functions instead of modifying the oe* logging functions
from base.bbclass (and utils.bbclass in oe) for a couple reasons. First, one of
my goals was to generate a uniform logging API between bash and python in
recipes. Second, there are no users of oe* logging in meta (oe-core) or
meta-yocto, while several oe recipes do use them. I wanted to make a clean start
with the freedom to change behavior without forcing the oe recipes to change or
experience unexpected logging changes. Eventually, the oe recipes can be
migrated to the new bb* logging routines and the existing oe* routines can be
retired (deleted).

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Cc: Chris Larson <clarson@kergoth.com>
---
 meta/classes/base.bbclass    |    1 +
 meta/classes/logging.bbclass |   72 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+), 0 deletions(-)
 create mode 100644 meta/classes/logging.bbclass
Richard Purdie - April 28, 2011, 9:05 a.m.
Hi Darren,

On Wed, 2011-04-27 at 00:29 -0700, Saul Wold wrote:
> The following logging mechanisms are to be used in bash functions of recipes.
> They are intended to map one to one in intention and output format with the
> python recipe logging functions of a similar naming convention: bb.plain(),
> bb.note(), etc.
> 
> For the time being, all of these print only to the task logs. Future
> enhancements may integrate these calls with the bitbake logging infrastructure,
> allowing for printing to the console as appropriate. The interface and intention
> statements reflect that future goal. Once it is in place, no changes will be
> necessary to recipes using these logging mechanisms.

This looks good but could you do a search and replace of any existing
users of the oe* functions and then remove them from base.bbclass
please? At the very least they should be calling the bb* equivalents.
I'd like to clean up this kind of thing as we go.

Cheers,

Richard
Darren Hart - April 29, 2011, 4:30 a.m.
On 04/28/2011 02:05 AM, Richard Purdie wrote:
> Hi Darren,
> 
> On Wed, 2011-04-27 at 00:29 -0700, Saul Wold wrote:
>> The following logging mechanisms are to be used in bash functions of recipes.
>> They are intended to map one to one in intention and output format with the
>> python recipe logging functions of a similar naming convention: bb.plain(),
>> bb.note(), etc.
>>
>> For the time being, all of these print only to the task logs. Future
>> enhancements may integrate these calls with the bitbake logging infrastructure,
>> allowing for printing to the console as appropriate. The interface and intention
>> statements reflect that future goal. Once it is in place, no changes will be
>> necessary to recipes using these logging mechanisms.
> 
> This looks good but could you do a search and replace of any existing
> users of the oe* functions and then remove them from base.bbclass
> please? At the very least they should be calling the bb* equivalents.
> I'd like to clean up this kind of thing as we go.

Sure thing. Is a follow-up patch acceptable or do you want me to
resubmit these in one series?

--
Darren

> 
> Cheers,
> 
> Richard
> 
> 
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Saul Wold - April 29, 2011, 4:34 a.m.
On 04/28/2011 09:30 PM, Darren Hart wrote:
>
>
> On 04/28/2011 02:05 AM, Richard Purdie wrote:
>> Hi Darren,
>>
>> On Wed, 2011-04-27 at 00:29 -0700, Saul Wold wrote:
>>> The following logging mechanisms are to be used in bash functions of recipes.
>>> They are intended to map one to one in intention and output format with the
>>> python recipe logging functions of a similar naming convention: bb.plain(),
>>> bb.note(), etc.
>>>
>>> For the time being, all of these print only to the task logs. Future
>>> enhancements may integrate these calls with the bitbake logging infrastructure,
>>> allowing for printing to the console as appropriate. The interface and intention
>>> statements reflect that future goal. Once it is in place, no changes will be
>>> necessary to recipes using these logging mechanisms.
>>
>> This looks good but could you do a search and replace of any existing
>> users of the oe* functions and then remove them from base.bbclass
>> please? At the very least they should be calling the bb* equivalents.
>> I'd like to clean up this kind of thing as we go.
>
> Sure thing. Is a follow-up patch acceptable or do you want me to
> resubmit these in one series?
>
Since we have pulled this set, a follow-up patch would be most excellent!

Thanks
	Sau!
> --
> Darren
>
>>
>> Cheers,
>>
>> Richard
>>
>>
>>
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core@lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>

Patch

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 7ca396d..eafad7e 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -8,6 +8,7 @@  inherit utils
 inherit utility-tasks
 inherit metadata_scm
 inherit buildstats
+inherit logging
 
 python sys_path_eh () {
     if isinstance(e, bb.event.ConfigParsed):
diff --git a/meta/classes/logging.bbclass b/meta/classes/logging.bbclass
new file mode 100644
index 0000000..78d65bd
--- /dev/null
+++ b/meta/classes/logging.bbclass
@@ -0,0 +1,72 @@ 
+# The following logging mechanisms are to be used in bash functions of recipes.
+# They are intended to map one to one in intention and output format with the
+# python recipe logging functions of a similar naming convention: bb.plain(),
+# bb.note(), etc.
+#
+# For the time being, all of these print only to the task logs. Future
+# enhancements may integrate these calls with the bitbake logging
+# infrastructure, allowing for printing to the console as appropriate. The
+# interface and intention statements reflect that future goal. Once it is
+# in place, no changes will be necessary to recipes using these logging
+# mechanisms.
+
+# Print the output exactly as it is passed in. Typically used for output of
+# tasks that should be seen on the console. Use sparingly.
+# Output: logs console
+# NOTE: console output is not currently implemented.
+bbplain() {
+	echo "$*"
+}
+
+# Notify the user of a noteworthy condition. 
+# Output: logs console
+# NOTE: console output is not currently implemented.
+bbnote() {
+	echo "NOTE: $*"
+}
+
+# Print a warning to the log. Warnings are non-fatal, and do not
+# indicate a build failure.
+# Output: logs
+bbwarn() {
+	echo "WARNING: $*"
+}
+
+# Print an error to the log. Errors are non-fatal in that the build can
+# continue, but they do indicate a build failure.
+# Output: logs
+bberror() {
+	echo "ERROR: $*"
+}
+
+# Print a fatal error to the log. Fatal errors indicate build failure
+# and halt the build, exiting with an error code.
+# Output: logs
+bbfatal() {
+	echo "ERROR: $*"
+	exit 1
+}
+
+# Print debug messages. These are appropriate for progress checkpoint
+# messages to the logs. Depending on the debug log level, they may also
+# go to the console.
+# Output: logs console
+# Usage: bbdebug 1 "first level debug message"
+#        bbdebug 2 "second level debug message"
+# NOTE: console output is not currently implemented.
+bbdebug() {
+	USAGE='Usage: bbdebug [123] "message"'
+	if [ $# -lt 2 ]; then
+		bbfatal "$USAGE"
+	fi
+	
+	# Strip off the debug level and ensure it is an integer
+	DBGLVL=$1; shift
+	if ! [[ "$DBGLVL" =~ ^[0-9]+ ]]; then
+		bbfatal "$USAGE"
+	fi
+
+	# All debug output is printed to the logs
+	echo "DEBUG: $*"
+}
+