Tinfoil fixes
cover Tinfoil fixes
Add context management and a parsing function, and ensure tinfoil using utilities within the bitbake repo shut down tinfoil properly at the end. The parsing function in particular is going to be needed to properly fix the layer index update script that has been broken since the multiconfig changes.
(This series borrows a few things from my tinfoil2 branch.)
The following changes since commit 0ed8975c42718342a104a9764a58816f964ec4ea:
fetch2: clean up remaining cwd saves/changes (2016-08-24 13:55:36 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib paule/tinfoil-fixes-bb
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/tinfoil-fixes-bb
Paul Eggleton (3):
tinfoil: add context manager functions
Ensure tinfoil is shut down correctly in utilities that use it
tinfoil: add a parse_recipe_file function
bin/bitbake-diffsigs | 6 +++--- bin/bitbake-layers | 53 +++++++++++++++++++++++++++------------------------- lib/bb/tinfoil.py | 27 ++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 28 deletions(-)
Signature · 1 line
2.5.5
PATCH 1/3 tinfoil: add context manager functions
Since calling the shutdown() function is highly recommended, make tinfoil objects a little easier to deal with by adding context manager support - so you can do the following:
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(True)
...
--- lib/bb/tinfoil.py | 6 ++++++ 1 file changed, 6 insertions(+)
lib/bb/tinfoil.py +6 -0
@@ -59,6 +59,12 @@ class Tinfoil: def register_idle_function(self, function, data): pass + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.shutdown() + def parseRecipes(self): sys.stderr.write("Parsing recipes..") self.logger.setLevel(logging.WARNING)
Signature · 1 line
2.5.5
PATCH 2/3 Ensure tinfoil is shut down correctly in utilities that use it
In reply to Paul EggletonWe 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 ...").
--- bin/bitbake-diffsigs | 6 +++--- bin/bitbake-layers | 53 +++++++++++++++++++++++++++------------------------- 2 files changed, 31 insertions(+), 28 deletions(-)
bin/bitbake-diffsigs +3 -3
@@ -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()
bin/bitbake-layers +28 -25
59 lines not on this page · raw message
Signature · 1 line
2.5.5
PATCH 3/3 tinfoil: add a parse_recipe_file function
In reply to Paul EggletonParsing 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.
--- lib/bb/tinfoil.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
lib/bb/tinfoil.py +21 -0
@@ -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()
Signature · 1 line
2.5.5