[bitbake-devel] [PATCH 3/6] command|cooker: Add reparseFiles command

Joshua Lock josh at linux.intel.com
Sat Jul 16 00:13:29 UTC 2011


On Fri, 2011-07-15 at 23:31 +0100, Richard Purdie wrote:
> On Fri, 2011-07-15 at 13:20 -0700, Joshua Lock wrote:
> > Add command reparseFiles to reparse bb files in a running cooker instance.
> > 
> > Fixes [YOCTO #1249]
> > 
> > Signed-off-by: Joshua Lock <josh at linux.intel.com>
> > ---
> >  lib/bb/command.py |    8 +++++++
> >  lib/bb/cooker.py  |   54 +++++++++++++++++++++++++++++++++-------------------
> >  2 files changed, 42 insertions(+), 20 deletions(-)
> > 
> 
> > diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
> > index 23f2c76..e4daaef 100644
> > --- a/lib/bb/cooker.py
> > +++ b/lib/bb/cooker.py
> > @@ -122,21 +122,8 @@ class BBCooker:
> >                  logger.critical("Unable to import extra RecipeInfo '%s' from '%s': %s" % (cache_name, module_name, exc))
> >                  sys.exit("FATAL: Failed to import extra cache class '%s'." % cache_name)
> >  
> > -        self.configuration.data = bb.data.init()
> > -
> > -        bb.data.inheritFromOS(self.configuration.data)
> > -
> > -        try:
> > -            self.parseConfigurationFiles(self.configuration.prefile,
> > -                                         self.configuration.postfile)
> > -        except SyntaxError:
> > -            sys.exit(1)
> > -        except Exception:
> > -            logger.exception("Error parsing configuration files")
> > -            sys.exit(1)
> > -
> > -        if not self.configuration.cmd:
> > -            self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
> > +        self.configuration.data = None
> > +        self.loadConfigurationData()
> >  
> >          bbpkgs = bb.data.getVar('BBPKGS', self.configuration.data, True)
> >          if bbpkgs and len(self.configuration.pkgs_to_build) == 0:
> > @@ -163,6 +150,26 @@ class BBCooker:
> >  
> >          self.parser = None
> >  
> > +    def loadConfigurationData(self):
> > +        self.configuration.data = bb.data.init()
> > +
> > +        if not self.server_registration_cb:
> > +            bb.data.setVar("BB_WORKERCONTEXT", "1", self.configuration.data)
> 
> This looks like one of the last remaining differences between the
> bitbake in poky and the upstream. See:
> 
> http://git.openembedded.net/cgit.cgi/bitbake/commit/?h=master-poky&id=a67671bcdd92f2ae3cd364b2addefef70a3c2398
> 
> but bottom line is this shouldn't be here.

Whoops.

> 
> > +        bb.data.inheritFromOS(self.configuration.data)
> 
> and this line is the one that worries me since it pokes around the
> environment. If we do this later, we're likely using a different
> environment and I'm not happy this is going to give good results.
> 
> This actually ties into the terminal bbclass issues Chris has been
> proposing recently. I think we need to store off the original
> environment into a datastore and then leave it somewhere fixed we can
> recall it later for the likes of this function and the terminal class
> code.

Ah, that's a better idea. I'll take a stab at something to do that.

> 
> > +        try:
> > +            self.parseConfigurationFiles(self.configuration.prefile,
> > +                                         self.configuration.postfile)
> > +        except SyntaxError:
> > +            sys.exit(1)
> > +        except Exception:
> > +            logger.exception("Error parsing configuration files")
> > +            sys.exit(1)
> > +
> > +        if not self.configuration.cmd:
> > +            self.configuration.cmd = bb.data.getVar("BB_DEFAULT_TASK", self.configuration.data, True) or "build"
> > +
> >      def parseConfiguration(self):
> >  
> > 
> > @@ -508,7 +515,7 @@ class BBCooker:
> >          bb.data.expandKeys(localdata)
> >  
> >          # Handle PREFERRED_PROVIDERS
> > -        for p in (bb.data.getVar('PREFERRED_PROVIDERS', localdata, 1) or "").split():
> > +        for p in (bb.data.getVar('PREFERRED_PROVIDERS', localdata, True) or "").split():
> >              try:
> >                  (providee, provider) = p.split(':')
> >              except:
> > @@ -999,8 +1006,8 @@ class BBCooker:
> >  
> >          self.server_registration_cb(buildTargetsIdle, rq)
> >  
> > -    def updateCache(self):
> > -        if self.state == state.running:
> > +    def updateCache(self, force=False):
> > +        if self.state == state.running and not force:
> >              return
> >  
> >          if self.state in (state.shutdown, state.stop):
> > @@ -1010,6 +1017,8 @@ class BBCooker:
> >          if self.state != state.parsing:
> >              self.parseConfiguration ()
> >  
> > +            if self.status:
> > +                del self.status
> >              self.status = bb.cache.CacheData(self.caches_array)
> >  
> >              ignore = bb.data.getVar("ASSUME_PROVIDED", self.configuration.data, 1) or ""
> > @@ -1083,7 +1092,7 @@ class BBCooker:
> >  
> >          collectlog.debug(1, "collecting .bb files")
> >  
> > -        files = (data.getVar( "BBFILES", self.configuration.data, 1 ) or "").split()
> > +        files = (data.getVar( "BBFILES", self.configuration.data, True) or "").split()
> >          data.setVar("BBFILES", " ".join(files), self.configuration.data)
> >  
> >          # Sort files by priority
> > @@ -1140,7 +1149,8 @@ class BBCooker:
> >              base = os.path.basename(f).replace('.bbappend', '.bb')
> >              if not base in self.appendlist:
> >                 self.appendlist[base] = []
> > -            self.appendlist[base].append(f)
> > +            if f not in self.appendlist[base]:
> > +                self.appendlist[base].append(f)
> 
> append files only get appended once. Shouldn't that be a separate patch?

Quite possibly. I have a bad habit of spotting things and changing them
when I should be thinking about something else. I'll split this change
out next time. Must have missed it this try.

> 
> Otherwise the patch and the idea are ok, we just need to be careful to
> get this right...

Thanks for the detailed review. I'll work on a new revision to address
your concerns.

Regards,
Joshua
-- 
Joshua Lock
        Yocto Project "Johannes factotum"
        Intel Open Source Technology Centre





More information about the bitbake-devel mailing list