diff options
Diffstat (limited to 'bitbake/lib/bb/cookerdata.py')
-rw-r--r-- | bitbake/lib/bb/cookerdata.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py index 0649e40995..65c153a5bb 100644 --- a/bitbake/lib/bb/cookerdata.py +++ b/bitbake/lib/bb/cookerdata.py | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | # | 2 | # |
2 | # Copyright (C) 2003, 2004 Chris Larson | 3 | # Copyright (C) 2003, 2004 Chris Larson |
3 | # Copyright (C) 2003, 2004 Phil Blundell | 4 | # Copyright (C) 2003, 2004 Phil Blundell |
@@ -254,14 +255,21 @@ class CookerDataBuilder(object): | |||
254 | self.data = self.basedata | 255 | self.data = self.basedata |
255 | self.mcdata = {} | 256 | self.mcdata = {} |
256 | 257 | ||
258 | def calc_datastore_hashes(self): | ||
259 | data_hash = hashlib.sha256() | ||
260 | data_hash.update(self.data.get_hash().encode('utf-8')) | ||
261 | multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split() | ||
262 | for config in multiconfig: | ||
263 | data_hash.update(self.mcdata[config].get_hash().encode('utf-8')) | ||
264 | self.data_hash = data_hash.hexdigest() | ||
265 | |||
257 | def parseBaseConfiguration(self, worker=False): | 266 | def parseBaseConfiguration(self, worker=False): |
258 | mcdata = {} | 267 | mcdata = {} |
259 | data_hash = hashlib.sha256() | ||
260 | try: | 268 | try: |
261 | self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) | 269 | self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles) |
262 | 270 | ||
263 | if self.data.getVar("BB_WORKERCONTEXT", False) is None and not worker: | 271 | servercontext = self.data.getVar("BB_WORKERCONTEXT", False) is None and not worker |
264 | bb.fetch.fetcher_init(self.data) | 272 | bb.fetch.fetcher_init(self.data, servercontext) |
265 | bb.parse.init_parser(self.data) | 273 | bb.parse.init_parser(self.data) |
266 | 274 | ||
267 | bb.event.fire(bb.event.ConfigParsed(), self.data) | 275 | bb.event.fire(bb.event.ConfigParsed(), self.data) |
@@ -279,7 +287,6 @@ class CookerDataBuilder(object): | |||
279 | bb.event.fire(bb.event.ConfigParsed(), self.data) | 287 | bb.event.fire(bb.event.ConfigParsed(), self.data) |
280 | 288 | ||
281 | bb.parse.init_parser(self.data) | 289 | bb.parse.init_parser(self.data) |
282 | data_hash.update(self.data.get_hash().encode('utf-8')) | ||
283 | mcdata[''] = self.data | 290 | mcdata[''] = self.data |
284 | 291 | ||
285 | multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split() | 292 | multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split() |
@@ -289,11 +296,9 @@ class CookerDataBuilder(object): | |||
289 | parsed_mcdata = self.parseConfigurationFiles(self.prefiles, self.postfiles, config) | 296 | parsed_mcdata = self.parseConfigurationFiles(self.prefiles, self.postfiles, config) |
290 | bb.event.fire(bb.event.ConfigParsed(), parsed_mcdata) | 297 | bb.event.fire(bb.event.ConfigParsed(), parsed_mcdata) |
291 | mcdata[config] = parsed_mcdata | 298 | mcdata[config] = parsed_mcdata |
292 | data_hash.update(parsed_mcdata.get_hash().encode('utf-8')) | ||
293 | if multiconfig: | 299 | if multiconfig: |
294 | bb.event.fire(bb.event.MultiConfigParsed(mcdata), self.data) | 300 | bb.event.fire(bb.event.MultiConfigParsed(mcdata), self.data) |
295 | 301 | ||
296 | self.data_hash = data_hash.hexdigest() | ||
297 | except bb.data_smart.ExpansionError as e: | 302 | except bb.data_smart.ExpansionError as e: |
298 | logger.error(str(e)) | 303 | logger.error(str(e)) |
299 | raise bb.BBHandledException() | 304 | raise bb.BBHandledException() |
@@ -328,6 +333,7 @@ class CookerDataBuilder(object): | |||
328 | for mc in mcdata: | 333 | for mc in mcdata: |
329 | self.mcdata[mc] = bb.data.createCopy(mcdata[mc]) | 334 | self.mcdata[mc] = bb.data.createCopy(mcdata[mc]) |
330 | self.data = self.mcdata[''] | 335 | self.data = self.mcdata[''] |
336 | self.calc_datastore_hashes() | ||
331 | 337 | ||
332 | def reset(self): | 338 | def reset(self): |
333 | # We may not have run parseBaseConfiguration() yet | 339 | # We may not have run parseBaseConfiguration() yet |
@@ -340,7 +346,7 @@ class CookerDataBuilder(object): | |||
340 | def _findLayerConf(self, data): | 346 | def _findLayerConf(self, data): |
341 | return findConfigFile("bblayers.conf", data) | 347 | return findConfigFile("bblayers.conf", data) |
342 | 348 | ||
343 | def parseConfigurationFiles(self, prefiles, postfiles, mc = "default"): | 349 | def parseConfigurationFiles(self, prefiles, postfiles, mc = ""): |
344 | data = bb.data.createCopy(self.basedata) | 350 | data = bb.data.createCopy(self.basedata) |
345 | data.setVar("BB_CURRENT_MC", mc) | 351 | data.setVar("BB_CURRENT_MC", mc) |
346 | 352 | ||