diff options
Diffstat (limited to 'bitbake/lib/bb')
| -rw-r--r-- | bitbake/lib/bb/cache.py | 17 | ||||
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 1 | ||||
| -rw-r--r-- | bitbake/lib/bb/event.py | 19 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 32 | 
4 files changed, 61 insertions, 8 deletions
| diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index b3c632b81c..fb02deb8ef 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py @@ -204,14 +204,31 @@ class Cache(object):                  logger.info('Bitbake version mismatch, rebuilding...')                  return +            cachesize = os.fstat(cachefile.fileno()).st_size +            bb.event.fire(bb.event.CacheLoadStarted(cachesize), self.data) + +            previous_percent = 0              while cachefile:                  try:                      key = pickled.load()                      value = pickled.load()                  except Exception:                      break +                  self.depends_cache[key] = value +                # only fire events on even percentage boundaries +                current_progress = cachefile.tell() +                current_percent = 100 * current_progress / cachesize +                if current_percent > previous_percent: +                    previous_percent = current_percent +                    bb.event.fire(bb.event.CacheLoadProgress(current_progress), +                                  self.data) + +            bb.event.fire(bb.event.CacheLoadCompleted(cachesize, +                                                      len(self.depends_cache)), +                          self.data) +      @staticmethod      def virtualfn2realfn(virtualfn):          """ diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 7a9b1d58d6..548273380f 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -1055,6 +1055,7 @@ class CookerParser(object):              self.shutdown(clean=False)              bb.fatal('Error parsing %s: %s' % (exc.recipe, exc)) +          self.current += 1          self.virtuals += len(result)          if parsed: diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index c2bacc50c2..ad53ba015c 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -324,6 +324,25 @@ class ParseProgress(Event):      def __init__(self, current):          self.current = current +class CacheLoadStarted(Event): +    """Loading of the dependency cache has begun""" +    def __init__(self, total): +        Event.__init__(self) +        self.total = total + +class CacheLoadProgress(Event): +    """Cache loading progress""" +    def __init__(self, current): +        Event.__init__(self) +        self.current = current + +class CacheLoadCompleted(Event): +    """Cache loading is complete""" +    def __init__(self, total, num_entries): +        Event.__init__(self) +        self.total = total +        self.num_entries = num_entries +  class DepTreeGenerated(Event):      """      Event when a dependency tree has been generated diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 69a84f7830..b9ad34f16a 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -31,12 +31,14 @@ from bb import ui  from bb.ui import uihelper  logger = logging.getLogger("BitBake") -widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ', -           progressbar.ETA()] +interactive = sys.stdout.isatty()  class BBProgress(progressbar.ProgressBar):      def __init__(self, msg, maxval):          self.msg = msg +        widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ', +           progressbar.ETA()] +          progressbar.ProgressBar.__init__(self, maxval, [self.msg + ": "] + widgets)  class NonInteractiveProgress(object): @@ -58,6 +60,12 @@ class NonInteractiveProgress(object):          self.fobj.write("done.\n")          self.fobj.flush() +def new_progress(msg, maxval): +    if interactive: +        return BBProgress(msg, maxval) +    else: +        return NonInteractiveProgress(msg, maxval) +  def main(server, eventHandler):      # Get values of variables which control our output @@ -93,8 +101,9 @@ def main(server, eventHandler):          print("XMLRPC Fault getting commandline:\n %s" % x)          return 1 +      parseprogress = None -    interactive = os.isatty(sys.stdout.fileno()) +    cacheprogress = None      shutdown = 0      return_value = 0      while True: @@ -149,11 +158,7 @@ def main(server, eventHandler):                  logger.info(event._message)                  continue              if isinstance(event, bb.event.ParseStarted): -                if interactive: -                    progress = BBProgress -                else: -                    progress = NonInteractiveProgress -                parseprogress = progress("Parsing recipes", event.total).start() +                parseprogress = new_progress("Parsing recipes", event.total).start()                  continue              if isinstance(event, bb.event.ParseProgress):                  parseprogress.update(event.current) @@ -164,6 +169,17 @@ def main(server, eventHandler):                      % ( event.total, event.cached, event.parsed, event.virtuals, event.skipped, event.masked, event.errors)))                  continue +            if isinstance(event, bb.event.CacheLoadStarted): +                cacheprogress = new_progress("Loading cache", event.total).start() +                continue +            if isinstance(event, bb.event.CacheLoadProgress): +                cacheprogress.update(event.current) +                continue +            if isinstance(event, bb.event.CacheLoadCompleted): +                cacheprogress.finish() +                print("Loaded %d entries from dependency cache." % event.num_entries) +                continue +              if isinstance(event, bb.command.CommandCompleted):                  break              if isinstance(event, bb.command.CommandFailed): | 
