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

Richard Purdie richard.purdie at linuxfoundation.org
Fri Jul 15 22:31:44 UTC 2011


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.

> +        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.

> +        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?

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

Cheers,

Richard





More information about the bitbake-devel mailing list