@@ -74,6 +74,10 @@ class BBLoggerMixin(object):
def warnonce(self, msg, *args, **kwargs):
return self.log(logging.WARNING - 1, msg, *args, **kwargs)
+ def erroronce(self, msg, *args, **kwargs):
+ return self.log(logging.ERROR - 1, msg, *args, **kwargs)
+
+
Logger = logging.getLoggerClass()
class BBLogger(Logger, BBLoggerMixin):
def __init__(self, name, *args, **kwargs):
@@ -166,6 +170,9 @@ def warnonce(*args):
def error(*args, **kwargs):
mainlogger.error(''.join(args), extra=kwargs)
+def erroronce(*args):
+ mainlogger.erroronce(''.join(args))
+
def fatal(*args, **kwargs):
mainlogger.critical(''.join(args), extra=kwargs)
raise BBHandledException()
@@ -30,6 +30,7 @@ class BBLogFormatter(logging.Formatter):
PLAIN = logging.INFO + 1
VERBNOTE = logging.INFO + 2
ERROR = logging.ERROR
+ ERRORONCE = logging.ERROR - 1
WARNING = logging.WARNING
WARNONCE = logging.WARNING - 1
CRITICAL = logging.CRITICAL
@@ -45,6 +46,7 @@ class BBLogFormatter(logging.Formatter):
WARNING : 'WARNING',
WARNONCE : 'WARNING',
ERROR : 'ERROR',
+ ERRORONCE : 'ERROR',
CRITICAL: 'ERROR',
}
@@ -62,6 +64,7 @@ class BBLogFormatter(logging.Formatter):
WARNING : YELLOW,
WARNONCE : YELLOW,
ERROR : RED,
+ ERRORONCE : RED,
CRITICAL: RED,
}
@@ -124,9 +127,10 @@ class BBLogFilter(object):
return True
return False
-class LogFilterWarnOnce(logging.Filter):
+class LogFilterShowOnce(logging.Filter):
def __init__(self):
self.seen_warnings = set()
+ self.seen_errors = set()
def filter(self, record):
msg = record.msg
@@ -134,6 +138,10 @@ class LogFilterWarnOnce(logging.Filter):
if record.msg in self.seen_warnings:
return False
self.seen_warnings.add(record.msg)
+ if record.levelno == bb.msg.BBLogFormatter.ERRORONCE:
+ if record.msg in self.seen_errors:
+ return False
+ self.seen_errors.add(record.msg)
return True
class LogFilterGEQLevel(logging.Filter):
@@ -418,7 +418,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
"formatter": "BitBake.consoleFormatter",
"level": console_loglevel,
"stream": "ext://sys.stdout",
- "filters": ["BitBake.warnonceFilter", "BitBake.stdoutFilter"],
+ "filters": ["BitBake.showonceFilter", "BitBake.stdoutFilter"],
".": {
"is_console": True,
},
@@ -428,7 +428,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
"formatter": "BitBake.consoleFormatter",
"level": loglevel,
"stream": "ext://sys.stderr",
- "filters": ["BitBake.warnonceFilter", "BitBake.stderrFilter"],
+ "filters": ["BitBake.showonceFilter", "BitBake.stderrFilter"],
".": {
"is_console": True,
},
@@ -443,7 +443,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
"formatter": "BitBake.consoleFormatter",
"level": 1,
"stream": "ext://sys.stdout",
- "filters": ["BitBake.warnonceFilter", "BitBake.verbconsoleFilter"],
+ "filters": ["BitBake.showonceFilter", "BitBake.verbconsoleFilter"],
".": {
"is_console": True,
},
@@ -476,8 +476,8 @@ def main(server, eventHandler, params, tf = TerminalFilter):
"()": "bb.msg.LogFilterLTLevel",
"level": console_loglevel
},
- "BitBake.warnonceFilter": {
- "()": "bb.msg.LogFilterWarnOnce",
+ "BitBake.showonceFilter": {
+ "()": "bb.msg.LogFilterShowOnce",
},
},
"loggers": {
@@ -650,7 +650,7 @@ def main(server, eventHandler, params, tf = TerminalFilter):
if isinstance(event, logging.LogRecord):
lastprint = time.time()
printinterval = 5000
- if event.levelno >= bb.msg.BBLogFormatter.ERROR:
+ if event.levelno >= bb.msg.BBLogFormatter.ERRORONCE:
errors = errors + 1
return_value = 1
elif event.levelno == bb.msg.BBLogFormatter.WARNING:
@@ -664,10 +664,10 @@ def main(server, eventHandler, params, tf = TerminalFilter):
continue
# Prefix task messages with recipe/task
- if event.taskpid in helper.pidmap and event.levelno != bb.msg.BBLogFormatter.PLAIN and event.levelno != bb.msg.BBLogFormatter.WARNONCE:
+ if event.taskpid in helper.pidmap and event.levelno not in [bb.msg.BBLogFormatter.PLAIN, bb.msg.BBLogFormatter.WARNONCE, bb.msg.BBLogFormatter.ERRORONCE]:
taskinfo = helper.running_tasks[helper.pidmap[event.taskpid]]
event.msg = taskinfo['title'] + ': ' + event.msg
- if hasattr(event, 'fn') and event.levelno != bb.msg.BBLogFormatter.WARNONCE:
+ if hasattr(event, 'fn') and event.levelno not in [bb.msg.BBLogFormatter.WARNONCE, bb.msg.BBLogFormatter.ERRORONCE]:
event.msg = event.fn + ': ' + event.msg
logging.getLogger(event.name).handle(event)
continue
@@ -881,8 +881,8 @@ def main(server, eventHandler, params, tf = TerminalFilter):
summary += pluralise("\nSummary: There was %s WARNING message.",
"\nSummary: There were %s WARNING messages.", warnings)
if return_value and errors:
- summary += pluralise("\nSummary: There was %s ERROR message shown, returning a non-zero exit code.",
- "\nSummary: There were %s ERROR messages shown, returning a non-zero exit code.", errors)
+ summary += pluralise("\nSummary: There was %s ERROR message, returning a non-zero exit code.",
+ "\nSummary: There were %s ERROR messages, returning a non-zero exit code.", errors)
if summary and params.options.quiet == 0:
print(summary)
Similar to the warnonce addition in the previous commit, add a similarly behaving version for error messages. Tweak the log filter further rather than adding an additional one. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- lib/bb/__init__.py | 7 +++++++ lib/bb/msg.py | 10 +++++++++- lib/bb/ui/knotty.py | 20 ++++++++++---------- 3 files changed, 26 insertions(+), 11 deletions(-)