bitbake: cooker: Clean up init/reset configuration code

Currently the cooker event data isn't rebuilt upon reset and the cache
configuration cannot be changed after init. These are both bad things
and this patch refactors the init/reset code so that it is possible
to reconfigure the server.

(Bitbake rev: 1193b8d76fcb6cb87e9ec135a2514370d7dd90ac)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2013-09-13 17:31:09 +01:00
parent fe1258d478
commit 2174a51ee8
1 changed files with 24 additions and 25 deletions

View File

@ -93,22 +93,6 @@ class BBCooker:
self.configuration = configuration self.configuration = configuration
self.caches_array = []
caches_name_array = ['bb.cache:CoreRecipeInfo'] + configuration.extra_caches
# At least CoreRecipeInfo will be loaded, so caches_array will never be empty!
# This is the entry point, no further check needed!
for var in caches_name_array:
try:
module_name, cache_name = var.split(':')
module = __import__(module_name, fromlist=(cache_name,))
self.caches_array.append(getattr(module, cache_name))
except ImportError as exc:
logger.critical("Unable to import extra RecipeInfo '%s' from '%s': %s" % (cache_name, module_name, exc))
sys.exit("FATAL: Failed to import extra cache class '%s'." % cache_name)
self.data = None
self.loadConfigurationData() self.loadConfigurationData()
# Take a lock so only one copy of bitbake can run against a given build # Take a lock so only one copy of bitbake can run against a given build
@ -118,13 +102,6 @@ class BBCooker:
if not self.lock: if not self.lock:
bb.fatal("Only one copy of bitbake should be run against a build directory") bb.fatal("Only one copy of bitbake should be run against a build directory")
#
# Special updated configuration we use for firing events
#
self.event_data = bb.data.createCopy(self.data)
bb.data.update_data(self.event_data)
bb.parse.init_parser(self.event_data)
# TOSTOP must not be set or our children will hang when they output # TOSTOP must not be set or our children will hang when they output
fd = sys.stdout.fileno() fd = sys.stdout.fileno()
if os.isatty(fd): if os.isatty(fd):
@ -141,6 +118,23 @@ class BBCooker:
self.parser = None self.parser = None
def initConfigurationData(self): def initConfigurationData(self):
self.state = state.initial
self.caches_array = []
caches_name_array = ['bb.cache:CoreRecipeInfo'] + self.configuration.extra_caches
# At least CoreRecipeInfo will be loaded, so caches_array will never be empty!
# This is the entry point, no further check needed!
for var in caches_name_array:
try:
module_name, cache_name = var.split(':')
module = __import__(module_name, fromlist=(cache_name,))
self.caches_array.append(getattr(module, cache_name))
except ImportError as exc:
logger.critical("Unable to import extra RecipeInfo '%s' from '%s': %s" % (cache_name, module_name, exc))
sys.exit("FATAL: Failed to import extra cache class '%s'." % cache_name)
self.databuilder = bb.cookerdata.CookerDataBuilder(self.configuration, False) self.databuilder = bb.cookerdata.CookerDataBuilder(self.configuration, False)
self.data = self.databuilder.data self.data = self.databuilder.data
@ -158,6 +152,13 @@ class BBCooker:
self.data = self.databuilder.data self.data = self.databuilder.data
self.data_hash = self.databuilder.data_hash self.data_hash = self.databuilder.data_hash
#
# Special updated configuration we use for firing events
#
self.event_data = bb.data.createCopy(self.data)
bb.data.update_data(self.event_data)
bb.parse.init_parser(self.event_data)
def modifyConfigurationVar(self, var, val, default_file, op): def modifyConfigurationVar(self, var, val, default_file, op):
if op == "append": if op == "append":
self.appendConfigurationVar(var, val, default_file) self.appendConfigurationVar(var, val, default_file)
@ -1246,11 +1247,9 @@ class BBCooker:
self.state = state.stop self.state = state.stop
def initialize(self): def initialize(self):
self.state = state.initial
self.initConfigurationData() self.initConfigurationData()
def reset(self): def reset(self):
self.state = state.initial
self.loadConfigurationData() self.loadConfigurationData()
def server_main(cooker, func, *args): def server_main(cooker, func, *args):