* [PATCH 2/3] Ensure tinfoil is shut down correctly in utilities that use it
2016-08-30 4:36 [PATCH 0/3] Tinfoil fixes Paul Eggleton
2016-08-30 4:36 ` [PATCH 1/3] tinfoil: add context manager functions Paul Eggleton
@ 2016-08-30 4:36 ` Paul Eggleton
2016-08-30 4:36 ` [PATCH 3/3] tinfoil: add a parse_recipe_file function Paul Eggleton
2 siblings, 0 replies; 4+ messages in thread
From: Paul Eggleton @ 2016-08-30 4:36 UTC (permalink / raw)
To: bitbake-devel
We should always shut down tinfoil when we're finished with it, either
by explicitly calling the shutdown() method or by using it as a
context manager ("with ...").
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
bin/bitbake-diffsigs | 6 +++---
bin/bitbake-layers | 53 +++++++++++++++++++++++++++-------------------------
2 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/bin/bitbake-diffsigs b/bin/bitbake-diffsigs
index 3b6ef88..527d2c7 100755
--- a/bin/bitbake-diffsigs
+++ b/bin/bitbake-diffsigs
@@ -115,9 +115,9 @@ parser.add_option("-t", "--task",
options, args = parser.parse_args(sys.argv)
if options.taskargs:
- tinfoil = bb.tinfoil.Tinfoil()
- tinfoil.prepare(config_only = True)
- find_compare_task(tinfoil, options.taskargs[0], options.taskargs[1])
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=True)
+ find_compare_task(tinfoil, options.taskargs[0], options.taskargs[1])
else:
if len(args) == 1:
parser.print_help()
diff --git a/bin/bitbake-layers b/bin/bitbake-layers
index 0c973df..946def2 100755
--- a/bin/bitbake-layers
+++ b/bin/bitbake-layers
@@ -87,31 +87,34 @@ def main():
plugins = []
tinfoil = tinfoil_init(False)
- for path in ([topdir] +
- tinfoil.config_data.getVar('BBPATH', True).split(':')):
- pluginpath = os.path.join(path, 'lib', 'bblayers')
- bb.utils.load_plugins(logger, plugins, pluginpath)
-
- registered = False
- for plugin in plugins:
- if hasattr(plugin, 'register_commands'):
- registered = True
- plugin.register_commands(subparsers)
- if hasattr(plugin, 'tinfoil_init'):
- plugin.tinfoil_init(tinfoil)
-
- if not registered:
- logger.error("No commands registered - missing plugins?")
- sys.exit(1)
-
- args = parser.parse_args(unparsed_args, namespace=global_args)
-
- if getattr(args, 'parserecipes', False):
- tinfoil.config_data.disableTracking()
- tinfoil.parseRecipes()
- tinfoil.config_data.enableTracking()
-
- return args.func(args)
+ try:
+ for path in ([topdir] +
+ tinfoil.config_data.getVar('BBPATH', True).split(':')):
+ pluginpath = os.path.join(path, 'lib', 'bblayers')
+ bb.utils.load_plugins(logger, plugins, pluginpath)
+
+ registered = False
+ for plugin in plugins:
+ if hasattr(plugin, 'register_commands'):
+ registered = True
+ plugin.register_commands(subparsers)
+ if hasattr(plugin, 'tinfoil_init'):
+ plugin.tinfoil_init(tinfoil)
+
+ if not registered:
+ logger.error("No commands registered - missing plugins?")
+ sys.exit(1)
+
+ args = parser.parse_args(unparsed_args, namespace=global_args)
+
+ if getattr(args, 'parserecipes', False):
+ tinfoil.config_data.disableTracking()
+ tinfoil.parseRecipes()
+ tinfoil.config_data.enableTracking()
+
+ return args.func(args)
+ finally:
+ tinfoil.shutdown()
if __name__ == "__main__":
--
2.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 3/3] tinfoil: add a parse_recipe_file function
2016-08-30 4:36 [PATCH 0/3] Tinfoil fixes Paul Eggleton
2016-08-30 4:36 ` [PATCH 1/3] tinfoil: add context manager functions Paul Eggleton
2016-08-30 4:36 ` [PATCH 2/3] Ensure tinfoil is shut down correctly in utilities that use it Paul Eggleton
@ 2016-08-30 4:36 ` Paul Eggleton
2 siblings, 0 replies; 4+ messages in thread
From: Paul Eggleton @ 2016-08-30 4:36 UTC (permalink / raw)
To: bitbake-devel
Parsing a recipe is such a common task for tinfoil-using scripts, and is
a little awkward to do properly, so we should add an API function to do
it. This should also isolate scripts a little from future changes to the
internal code.
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
---
lib/bb/tinfoil.py | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/lib/bb/tinfoil.py b/lib/bb/tinfoil.py
index 441be2c..793565f 100644
--- a/lib/bb/tinfoil.py
+++ b/lib/bb/tinfoil.py
@@ -90,6 +90,27 @@ class Tinfoil:
else:
self.parseRecipes()
+ def parse_recipe_file(self, fn, appends=True, appendlist=None):
+ """
+ Parse the specified recipe file (with or without bbappends)
+ and return a datastore object representing the environment
+ for the recipe.
+ """
+ if appends and appendlist == []:
+ appends = False
+ parser = bb.cache.NoCache(self.cooker.databuilder)
+ 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
+ envdata = parser.loadDataFull(fn, appendfiles)
+ return envdata
+
def shutdown(self):
self.cooker.shutdown(force=True)
self.cooker.post_serve()
--
2.5.5
^ permalink raw reply related [flat|nested] 4+ messages in thread