diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2016-08-30 14:16:22 +1200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-02 16:29:36 +0100 |
commit | 39780b1ccbd76579db0fc6fb9369c848a3bafa9d (patch) | |
tree | a45a2142d3bb6c9a7cfde46f4c7f401469173a92 /lib/bb/tinfoil.py | |
parent | 5b3fedfe0822dd7effa4b6d5e96eaf42669a71df (diff) | |
download | bitbake-contrib-39780b1ccbd76579db0fc6fb9369c848a3bafa9d.tar.gz |
tinfoil: add a parse_recipe_file function
Parsing a recipe is such a common task for tinfoil-using scripts, and is
a little awkward to do properly, so add an API function to do it. This
should also isolate scripts a little from future changes to the internal
code. The first user of this will be the OpenEmbedded layer index update
script.
Part of the fix for [YOCTO #10192].
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Diffstat (limited to 'lib/bb/tinfoil.py')
-rw-r--r-- | lib/bb/tinfoil.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/bb/tinfoil.py b/lib/bb/tinfoil.py index 441be2c61..8899e861c 100644 --- a/lib/bb/tinfoil.py +++ b/lib/bb/tinfoil.py @@ -90,6 +90,42 @@ class Tinfoil: else: self.parseRecipes() + def parse_recipe_file(self, fn, appends=True, appendlist=None, config_data=None): + """ + Parse the specified recipe file (with or without bbappends) + and return a datastore object representing the environment + for the recipe. + Parameters: + fn: recipe file to parse - can be a file path or virtual + specification + appends: True to apply bbappends, False otherwise + appendlist: optional list of bbappend files to apply, if you + want to filter them + config_data: custom config datastore to use. NOTE: if you + specify config_data then you cannot use a virtual + specification for fn. + """ + if appends and appendlist == []: + appends = False + if appends: + if appendlist: + appendfiles = appendlist + else: + if not hasattr(self.cooker, 'collection'): + raise Exception('You must call tinfoil.prepare() with config_only=False in order to get bbappends') + appendfiles = self.cooker.collection.get_file_appends(fn) + else: + appendfiles = None + if config_data: + # We have to use a different function here if we're passing in a datastore + localdata = bb.data.createCopy(config_data) + envdata = bb.cache.parse_recipe(localdata, fn, appendfiles)[''] + else: + # Use the standard path + parser = bb.cache.NoCache(self.cooker.databuilder) + envdata = parser.loadDataFull(fn, appendfiles) + return envdata + def shutdown(self): self.cooker.shutdown(force=True) self.cooker.post_serve() |