bitbake: 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]. (Bitbake rev: 39780b1ccbd76579db0fc6fb9369c848a3bafa9d) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
818a36590a
commit
26aad57ece
|
@ -90,6 +90,42 @@ class Tinfoil:
|
||||||
else:
|
else:
|
||||||
self.parseRecipes()
|
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):
|
def shutdown(self):
|
||||||
self.cooker.shutdown(force=True)
|
self.cooker.shutdown(force=True)
|
||||||
self.cooker.post_serve()
|
self.cooker.post_serve()
|
||||||
|
|
Loading…
Reference in New Issue