diff options
-rw-r--r-- | bitbake/lib/bb/cooker.py | 10 | ||||
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 13 |
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 |