summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2013-05-23 10:49:57 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-05-24 10:34:52 +0100
commitea346917910734b6a9e537f83bd26b18cd3bf4f0 (patch)
tree9dd88d3a824e3480fc754da00e46a36a76cb340d
parentb9bd05b6724bb1cfe1a2ebd0610e6e084525eb63 (diff)
downloadast2050-yocto-poky-ea346917910734b6a9e537f83bd26b18cd3bf4f0.zip
ast2050-yocto-poky-ea346917910734b6a9e537f83bd26b18cd3bf4f0.tar.gz
bitbake: cooker/cookerdata/utils: Improve context management
The current execution context management for bitbake is ugly and the use of a global variable is nasty. Fixing that is hard, however we can improve things to start to establish an API for accessing and changing that context. This patch also adds in an explicit reset of the context when we reparse the configuration data which starts to improve the lifecycle of the data in setups like hob. (Bitbake rev: 6c3281a140125337fc75783973485e16785d05a1) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/cooker.py5
-rw-r--r--bitbake/lib/bb/cookerdata.py1
-rw-r--r--bitbake/lib/bb/utils.py26
3 files changed, 22 insertions, 10 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 41f70ab..e868647 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -1454,7 +1454,7 @@ class Parser(multiprocessing.Process):
self.quit = quit
self.init = init
multiprocessing.Process.__init__(self)
- self.context = bb.utils._context.copy()
+ self.context = bb.utils.get_context().copy()
self.handlers = bb.event._handlers.copy()
def run(self):
@@ -1490,7 +1490,8 @@ class Parser(multiprocessing.Process):
def parse(self, filename, appends, caches_array):
try:
- bb.utils._context = self.context.copy()
+ # Reset our environment and handlers to the original settings
+ bb.utils.set_context(self.context.copy())
bb.event._handlers = self.handlers.copy()
return True, bb.cache.Cache.parse(filename, appends, self.cfg, caches_array)
except Exception as exc:
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index c4a28c8..de43310 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -173,6 +173,7 @@ class CookerDataBuilder(object):
self.postfiles = params.postfile
self.tracking = params.tracking
+ bb.utils.set_context(bb.utils.clean_context())
self.data = bb.data.init()
if self.tracking:
self.data.enableTracking()
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index 1ecc44a..7db6e38 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -36,12 +36,22 @@ from contextlib import contextmanager
logger = logging.getLogger("BitBake.Util")
+def clean_context():
+ return {
+ "os": os,
+ "bb": bb,
+ "time": time,
+ }
+
+def get_context():
+ return _context
+
+
+def set_context(ctx):
+ _context = ctx
+
# Context used in better_exec, eval
-_context = {
- "os": os,
- "bb": bb,
- "time": time,
-}
+_context = clean_context()
def explode_version(s):
r = []
@@ -343,7 +353,7 @@ def better_exec(code, context, text = None, realfile = "<code>"):
if not hasattr(code, "co_filename"):
code = better_compile(code, realfile, realfile)
try:
- exec(code, _context, context)
+ exec(code, get_context(), context)
except Exception as e:
(t, value, tb) = sys.exc_info()
@@ -358,10 +368,10 @@ def better_exec(code, context, text = None, realfile = "<code>"):
raise e
def simple_exec(code, context):
- exec(code, _context, context)
+ exec(code, get_context(), context)
def better_eval(source, locals):
- return eval(source, _context, locals)
+ return eval(source, get_context(), locals)
@contextmanager
def fileslocked(files):
OpenPOWER on IntegriCloud