summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py10
-rw-r--r--bitbake/lib/bb/cookerdata.py13
2 files changed, 16 insertions, 7 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 6754f986bf..2e80986640 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -281,7 +281,6 @@ class BBCooker:
281 self.databuilder = bb.cookerdata.CookerDataBuilder(self.configuration, False) 281 self.databuilder = bb.cookerdata.CookerDataBuilder(self.configuration, False)
282 self.databuilder.parseBaseConfiguration() 282 self.databuilder.parseBaseConfiguration()
283 self.data = self.databuilder.data 283 self.data = self.databuilder.data
284 self.data_hash = self.databuilder.data_hash
285 self.extraconfigdata = {} 284 self.extraconfigdata = {}
286 285
287 eventlog = self.data.getVar("BB_DEFAULT_EVENTLOG") 286 eventlog = self.data.getVar("BB_DEFAULT_EVENTLOG")
@@ -370,6 +369,11 @@ class BBCooker:
370 if not clean: 369 if not clean:
371 bb.parse.BBHandler.cached_statements = {} 370 bb.parse.BBHandler.cached_statements = {}
372 371
372 # If writes were made to any of the data stores, we need to recalculate the data
373 # store cache
374 if hasattr(self, "databuilder"):
375 self.databuilder.calc_datastore_hashes()
376
373 def parseConfiguration(self): 377 def parseConfiguration(self):
374 self.updateCacheSync() 378 self.updateCacheSync()
375 379
@@ -1338,7 +1342,7 @@ class BBCooker:
1338 self.buildSetVars() 1342 self.buildSetVars()
1339 self.reset_mtime_caches() 1343 self.reset_mtime_caches()
1340 1344
1341 bb_caches = bb.cache.MulticonfigCache(self.databuilder, self.data_hash, self.caches_array) 1345 bb_caches = bb.cache.MulticonfigCache(self.databuilder, self.databuilder.data_hash, self.caches_array)
1342 1346
1343 layername = self.collections[mc].calc_bbfile_priority(fn)[2] 1347 layername = self.collections[mc].calc_bbfile_priority(fn)[2]
1344 infos = bb_caches[mc].parse(fn, self.collections[mc].get_file_appends(fn), layername) 1348 infos = bb_caches[mc].parse(fn, self.collections[mc].get_file_appends(fn), layername)
@@ -2112,7 +2116,7 @@ class CookerParser(object):
2112 self.mcfilelist = mcfilelist 2116 self.mcfilelist = mcfilelist
2113 self.cooker = cooker 2117 self.cooker = cooker
2114 self.cfgdata = cooker.data 2118 self.cfgdata = cooker.data
2115 self.cfghash = cooker.data_hash 2119 self.cfghash = cooker.databuilder.data_hash
2116 self.cfgbuilder = cooker.databuilder 2120 self.cfgbuilder = cooker.databuilder
2117 2121
2118 # Accounting statistics 2122 # Accounting statistics
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index 0649e40995..3ad5cf3dd0 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -254,9 +254,16 @@ class CookerDataBuilder(object):
254 self.data = self.basedata 254 self.data = self.basedata
255 self.mcdata = {} 255 self.mcdata = {}
256 256
257 def calc_datastore_hashes(self):
258 data_hash = hashlib.sha256()
259 data_hash.update(self.data.get_hash().encode('utf-8'))
260 multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split()
261 for config in multiconfig:
262 data_hash.update(self.mcdata[config].get_hash().encode('utf-8'))
263 self.data_hash = data_hash.hexdigest()
264
257 def parseBaseConfiguration(self, worker=False): 265 def parseBaseConfiguration(self, worker=False):
258 mcdata = {} 266 mcdata = {}
259 data_hash = hashlib.sha256()
260 try: 267 try:
261 self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) 268 self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles)
262 269
@@ -279,7 +286,6 @@ class CookerDataBuilder(object):
279 bb.event.fire(bb.event.ConfigParsed(), self.data) 286 bb.event.fire(bb.event.ConfigParsed(), self.data)
280 287
281 bb.parse.init_parser(self.data) 288 bb.parse.init_parser(self.data)
282 data_hash.update(self.data.get_hash().encode('utf-8'))
283 mcdata[''] = self.data 289 mcdata[''] = self.data
284 290
285 multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split() 291 multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split()
@@ -289,11 +295,9 @@ class CookerDataBuilder(object):
289 parsed_mcdata = self.parseConfigurationFiles(self.prefiles, self.postfiles, config) 295 parsed_mcdata = self.parseConfigurationFiles(self.prefiles, self.postfiles, config)
290 bb.event.fire(bb.event.ConfigParsed(), parsed_mcdata) 296 bb.event.fire(bb.event.ConfigParsed(), parsed_mcdata)
291 mcdata[config] = parsed_mcdata 297 mcdata[config] = parsed_mcdata
292 data_hash.update(parsed_mcdata.get_hash().encode('utf-8'))
293 if multiconfig: 298 if multiconfig:
294 bb.event.fire(bb.event.MultiConfigParsed(mcdata), self.data) 299 bb.event.fire(bb.event.MultiConfigParsed(mcdata), self.data)
295 300
296 self.data_hash = data_hash.hexdigest()
297 except bb.data_smart.ExpansionError as e: 301 except bb.data_smart.ExpansionError as e:
298 logger.error(str(e)) 302 logger.error(str(e))
299 raise bb.BBHandledException() 303 raise bb.BBHandledException()
@@ -328,6 +332,7 @@ class CookerDataBuilder(object):
328 for mc in mcdata: 332 for mc in mcdata:
329 self.mcdata[mc] = bb.data.createCopy(mcdata[mc]) 333 self.mcdata[mc] = bb.data.createCopy(mcdata[mc])
330 self.data = self.mcdata[''] 334 self.data = self.mcdata['']
335 self.calc_datastore_hashes()
331 336
332 def reset(self): 337 def reset(self):
333 # We may not have run parseBaseConfiguration() yet 338 # We may not have run parseBaseConfiguration() yet