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>
This commit is contained in:
parent
b9bd05b672
commit
ea34691791
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue