diff options
| -rwxr-xr-x | bitbake/bin/bitbake | 5 | ||||
| -rw-r--r-- | bitbake/lib/bb/event.py | 18 | ||||
| -rw-r--r-- | bitbake/lib/bb/runqueue.py | 10 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 72 | 
4 files changed, 57 insertions, 48 deletions
| diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index 9b2cfdf5c5..a80c01ca50 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake @@ -164,7 +164,8 @@ Default BBFILES are the .bb files in the current directory.""")      configuration.pkgs_to_build.extend(args[1:])      configuration.initial_path = os.environ['PATH'] -    logger.addHandler(event.LogHandler()) +    loghandler = event.LogHandler() +    logger.addHandler(loghandler)      #server = bb.server.xmlrpc      server = bb.server.none @@ -190,6 +191,8 @@ Default BBFILES are the .bb files in the current directory.""")      server.BitBakeServerFork(cooker, cooker.server, serverinfo, cooker_logfile)      del cooker +    logger.removeHandler(loghandler) +      # Setup a connection to the server (cooker)      serverConnection = server.BitBakeServerConnection(serverinfo) diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index c04ffd5ac1..3fb9ff5bfc 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -328,20 +328,8 @@ class MsgPlain(MsgBase):  class LogHandler(logging.Handler):      """Dispatch logging messages as bitbake events""" -    messages = ( -        (logging.DEBUG, MsgDebug), -        (logging.INFO, MsgNote), -        (logging.WARNING, MsgWarn), -        (logging.ERROR, MsgError), -        (logging.CRITICAL, MsgFatal), -    ) -      def emit(self, record): -        for level, msgclass in self.messages: -            if record.levelno <= level: -                msg = self.format(record) -                fire(msgclass(msg), None) -                if bb.event.useStdout: -                    print(record.levelname + ": " + record.getMessage()) -                break +        fire(record, None) +        if bb.event.useStdout: +            print(self.format(record)) diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index be873ff7dc..94b456a988 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -24,11 +24,14 @@ Handles preparation and execution of a queue of tasks  import bb, os, sys  import subprocess -from bb import msg, data, event  import signal  import stat  import fcntl  import copy +import logging +from bb import msg, data, event + +bblogger = logging.getLogger("BitBake")  try:      import cPickle as pickle @@ -1127,6 +1130,11 @@ class RunQueueExecute:              bb.event.worker_pipe = pipeout              bb.event.useStdout = False +            # Child processes should send their messages to the UI +            # process via the server process, not print them +            # themselves +            bblogger.handlers = [bb.event.LogHandler()] +              self.rq.state = runQueueChildProcess              # Make the child the process group leader              os.setpgid(0, 0) diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 9162c79f6a..177a12609c 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -24,12 +24,22 @@ import os  import sys  import itertools  import xmlrpclib +import logging  from bb import ui  from bb.ui import uihelper - +logger = logging.getLogger("BitBake")  parsespin = itertools.cycle( r'|/-\\' ) +class BBLogFormatter(logging.Formatter): +    """Formatter which ensures that our 'plain' messages (logging.INFO + 1) are used as is""" + +    def format(self, record): +        if record.levelno == logging.INFO + 1: +            return record.getMessage() +        else: +            return logging.Formatter.format(self, record) +  def init(server, eventHandler):      # Get values of variables which control our output @@ -38,9 +48,23 @@ def init(server, eventHandler):      helper = uihelper.BBUIHelper() +    # Set up logging to stdout in our usual format +    logging.addLevelName(logging.INFO, "NOTE") +    logging.addLevelName(logging.CRITICAL, "FATAL") + +    for level in xrange(logging.INFO - 1, logging.DEBUG + 1, -1): +        logging.addLevelName(level, logging.getLevelName(logging.INFO)) + +    for level in xrange(logging.DEBUG - 1, 0, -1): +        logging.addLevelName(level, logging.getLevelName(logging.DEBUG)) + +    console = logging.StreamHandler(sys.stdout) +    format = BBLogFormatter("%(levelname)s: %(message)s") +    console.setFormatter(format) +    logger.addHandler(console) +      try:          cmdline = server.runCommand(["getCmdLineAction"]) -        #print cmdline          if not cmdline:              return 1          ret = server.runCommand(cmdline) @@ -58,7 +82,6 @@ def init(server, eventHandler):              event = eventHandler.waitEvent(0.25)              if event is None:                  continue -            #print event              helper.eventHandler(event)              if isinstance(event, bb.runqueue.runQueueExitWait):                  if not shutdown: @@ -72,26 +95,13 @@ def init(server, eventHandler):                          print("%s: %s (pid %s)" % (tasknum, activetasks[task]["title"], task))                          tasknum = tasknum + 1 -            if isinstance(event, bb.event.MsgPlain): -                print(event._message) -                continue -            if isinstance(event, bb.event.MsgDebug): -                print('DEBUG: ' + event._message) -                continue -            if isinstance(event, bb.event.MsgNote): -                print('NOTE: ' + event._message) -                continue -            if isinstance(event, bb.event.MsgWarn): -                print('WARNING: ' + event._message) -                continue -            if isinstance(event, bb.event.MsgError): -                return_value = 1 -                print('ERROR: ' + event._message) -                continue -            if isinstance(event, bb.event.MsgFatal): -                return_value = 1 -                print('FATAL: ' + event._message) +            if isinstance(event, logging.LogRecord): +                if event.levelno is logging.CRITICAL or event.levelno is logging.ERROR: +                    return_value = 1 +            if isinstance(event, logging.LogRecord): +                logger.handle(event)                  continue +              if isinstance(event, bb.build.TaskFailed):                  return_value = 1                  logfile = event.logfile @@ -117,7 +127,7 @@ def init(server, eventHandler):                              for line in lines:                                  print(line)              if isinstance(event, bb.build.TaskBase): -                print("NOTE: %s" % event._message) +                logger.info(event._message)                  continue              if isinstance(event, bb.event.ParseProgress):                  x = event.sofar @@ -144,15 +154,15 @@ def init(server, eventHandler):                  continue              if isinstance(event, bb.command.CookerCommandFailed):                  return_value = 1 -                print("Command execution failed: %s" % event.error) +                logger.error("Command execution failed: %s" % event.error)                  break              if isinstance(event, bb.cooker.CookerExit):                  break              if isinstance(event, bb.event.MultipleProviders): -                print("NOTE: multiple providers are available for %s%s (%s)" % (event._is_runtime and "runtime " or "", -                                                                                event._item, -                                                                                ", ".join(event._candidates))) -                print("NOTE: consider defining a PREFERRED_PROVIDER entry to match %s" % event._item) +                logger.info("multiple providers are available for %s%s (%s)", event._is_runtime and "runtime " or "", +                            event._item, +                            ", ".join(event._candidates)) +                logger.info("consider defining a PREFERRED_PROVIDER entry to match %s", event._item)                  continue              if isinstance(event, bb.event.NoProvider):                  if event._runtime: @@ -161,9 +171,9 @@ def init(server, eventHandler):                      r = ""                  if event._dependees: -                    print("ERROR: Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)" % (r, event._item, ", ".join(event._dependees), r)) +                    logger.error("Nothing %sPROVIDES '%s' (but %s %sDEPENDS on or otherwise requires it)", r, event._item, ", ".join(event._dependees), r)                  else: -                    print("ERROR: Nothing %sPROVIDES '%s'" % (r, event._item)) +                    logger.error("Nothing %sPROVIDES '%s'", r, event._item)                  continue              # ignore @@ -175,7 +185,7 @@ def init(server, eventHandler):                                    bb.runqueue.runQueueExitWait)):                  continue -            print("Unknown Event: %s" % event) +            logger.error("Unknown event: %s", event)          except KeyboardInterrupt:              if shutdown == 2: | 
