<div><font face="arial, sans-serif">Add bold color output to log level name and standard color output to log msg</font></div><div><font face="arial, sans-serif">when bitbake is run from an iteractive console.  Color output is only enabled</font></div>
<div><font face="arial, sans-serif">if the terminal supports color.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Signed-off-by: Seth Bollinger &lt;<a href="mailto:seth.boll@gmail.com">seth.boll@gmail.com</a>&gt;</font></div>
<div><font face="arial, sans-serif">---</font></div><div><font face="arial, sans-serif"> bitbake/lib/bb/msg.py       |   40 ++++++++++++++++++++++++++++++++++++++++</font></div><div><font face="arial, sans-serif"> bitbake/lib/bb/ui/knotty.py |    6 +++++-</font></div>
<div><font face="arial, sans-serif"> 2 files changed, 45 insertions(+), 1 deletions(-)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py</font></div>
<div><font face="arial, sans-serif">index 9b39325..68b2ad7 100644</font></div><div><font face="arial, sans-serif">--- a/bitbake/lib/bb/msg.py</font></div><div><font face="arial, sans-serif">+++ b/bitbake/lib/bb/msg.py</font></div>
<div><font face="arial, sans-serif">@@ -55,6 +55,25 @@ class BBLogFormatter(logging.Formatter):</font></div><div><font face="arial, sans-serif">         CRITICAL: &#39;ERROR&#39;,</font></div><div><font face="arial, sans-serif">     }</font></div>
<div><font face="arial, sans-serif"> </font></div><div><font face="arial, sans-serif">+    color_enabled = False</font></div><div><font face="arial, sans-serif">+    BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(30,38)</font></div>
<div><font face="arial, sans-serif">+</font></div><div><font face="arial, sans-serif">+    COLORS = {</font></div><div><font face="arial, sans-serif">+        DEBUG3  : CYAN,</font></div><div><font face="arial, sans-serif">+        DEBUG2  : CYAN,</font></div>
<div><font face="arial, sans-serif">+        DEBUG   : CYAN,</font></div><div><font face="arial, sans-serif">+        VERBOSE : WHITE,</font></div><div><font face="arial, sans-serif">+        NOTE    : WHITE,</font></div>
<div><font face="arial, sans-serif">+        PLAIN   : WHITE,</font></div><div><font face="arial, sans-serif">+        WARNING : YELLOW,</font></div><div><font face="arial, sans-serif">+        ERROR   : RED,</font></div>
<div><font face="arial, sans-serif">+        CRITICAL: RED,</font></div><div><font face="arial, sans-serif">+    }</font></div><div><font face="arial, sans-serif">+</font></div><div><font face="arial, sans-serif">+    BLD = &#39;\033[1;%dm&#39;</font></div>
<div><font face="arial, sans-serif">+    STD = &#39;\033[%dm&#39;</font></div><div><font face="arial, sans-serif">+    RST = &#39;\033[0m&#39;</font></div><div><font face="arial, sans-serif">+</font></div><div><font face="arial, sans-serif">     def getLevelName(self, levelno):</font></div>
<div><font face="arial, sans-serif">         try:</font></div><div><font face="arial, sans-serif">             return self.levelnames[levelno]</font></div><div><font face="arial, sans-serif">@@ -67,6 +86,8 @@ class BBLogFormatter(logging.Formatter):</font></div>
<div><font face="arial, sans-serif">         if record.levelno == self.PLAIN:</font></div><div><font face="arial, sans-serif">             msg = record.getMessage()</font></div><div><font face="arial, sans-serif">         else:</font></div>
<div><font face="arial, sans-serif">+            if self.color_enabled:</font></div><div><font face="arial, sans-serif">+                self.colorize(record)</font></div><div><font face="arial, sans-serif">             msg = logging.Formatter.format(self, record)</font></div>
<div><font face="arial, sans-serif"> </font></div><div><font face="arial, sans-serif">         if hasattr(record, &#39;bb_exc_info&#39;):</font></div><div><font face="arial, sans-serif">@@ -75,6 +96,25 @@ class BBLogFormatter(logging.Formatter):</font></div>
<div><font face="arial, sans-serif">             msg += &#39;\n&#39; + &#39;&#39;.join(formatted)</font></div><div><font face="arial, sans-serif">         return msg</font></div><div><font face="arial, sans-serif"> </font></div>
<div><font face="arial, sans-serif">+    def colorize(self, record):</font></div><div><font face="arial, sans-serif">+        color = self.COLORS[record.levelno]</font></div><div><font face="arial, sans-serif">+        if self.color_enabled and color is not None:</font></div>
<div><font face="arial, sans-serif">+            record.levelname = &quot;&quot;.join([self.BLD % color, record.levelname, self.RST])</font></div><div><font face="arial, sans-serif">+            record.msg = &quot;&quot;.join([self.STD % color, record.msg, self.RST])</font></div>
<div><font face="arial, sans-serif">+</font></div><div><font face="arial, sans-serif">+    def enable_color(self):</font></div><div><font face="arial, sans-serif">+        import curses</font></div><div><font face="arial, sans-serif">+        try:</font></div>
<div><font face="arial, sans-serif">+            win = None</font></div><div><font face="arial, sans-serif">+            win = curses.initscr()</font></div><div><font face="arial, sans-serif">+            if curses.has_colors():</font></div>
<div><font face="arial, sans-serif">+                self.color_enabled = True</font></div><div><font face="arial, sans-serif">+        except:</font></div><div><font face="arial, sans-serif">+            pass</font></div>
<div><font face="arial, sans-serif">+        finally:</font></div><div><font face="arial, sans-serif">+            if win is not None:</font></div><div><font face="arial, sans-serif">+                curses.endwin()</font></div>
<div><font face="arial, sans-serif">+</font></div><div><font face="arial, sans-serif"> class BBLogFilter(object):</font></div><div><font face="arial, sans-serif">     def __init__(self, handler, level, debug_domains):</font></div>
<div><font face="arial, sans-serif">         self.stdlevel = level</font></div><div><font face="arial, sans-serif">diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py</font></div><div><font face="arial, sans-serif">index b99a121..d9aa973 100644</font></div>
<div><font face="arial, sans-serif">--- a/bitbake/lib/bb/ui/knotty.py</font></div><div><font face="arial, sans-serif">+++ b/bitbake/lib/bb/ui/knotty.py</font></div><div><font face="arial, sans-serif">@@ -238,12 +238,16 @@ def main(server, eventHandler, tf = TerminalFilter):</font></div>
<div><font face="arial, sans-serif">     helper = uihelper.BBUIHelper()</font></div><div><font face="arial, sans-serif"> </font></div><div><font face="arial, sans-serif">     console = logging.StreamHandler(sys.stdout)</font></div>
<div><font face="arial, sans-serif">-    format = bb.msg.BBLogFormatter(&quot;%(levelname)s: %(message)s&quot;)</font></div><div><font face="arial, sans-serif">+    format_str = &quot;%(levelname)s: %(message)s&quot;</font></div>
<div><font face="arial, sans-serif">+    format = bb.msg.BBLogFormatter(format_str)</font></div><div><font face="arial, sans-serif">+    if interactive:</font></div><div><font face="arial, sans-serif">+        format.enable_color()</font></div>
<div><font face="arial, sans-serif">     bb.msg.addDefaultlogFilter(console)</font></div><div><font face="arial, sans-serif">     console.setFormatter(format)</font></div><div><font face="arial, sans-serif">     logger.addHandler(console)</font></div>
<div><font face="arial, sans-serif">     if consolelogfile:</font></div><div><font face="arial, sans-serif">         bb.utils.mkdirhier(os.path.dirname(consolelogfile))</font></div><div><font face="arial, sans-serif">+        format = bb.msg.BBLogFormatter(format_str)</font></div>
<div><font face="arial, sans-serif">         consolelog = logging.FileHandler(consolelogfile)</font></div><div><font face="arial, sans-serif">         bb.msg.addDefaultlogFilter(consolelog)</font></div><div><font face="arial, sans-serif">         consolelog.setFormatter(format)</font></div>
<div><font face="arial, sans-serif">-- </font></div><div><font face="arial, sans-serif">1.7.2.5</font></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div>