diff options
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r-- | bitbake/lib/bb/cache.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 26 |
2 files changed, 28 insertions, 1 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 646fdecbeb..c6f3794d5e 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py | |||
@@ -453,6 +453,8 @@ class Cache: | |||
453 | if not self.getVar('BROKEN', file_name, True) and not self.getVar('EXCLUDE_FROM_WORLD', file_name, True): | 453 | if not self.getVar('BROKEN', file_name, True) and not self.getVar('EXCLUDE_FROM_WORLD', file_name, True): |
454 | cacheData.possible_world.append(file_name) | 454 | cacheData.possible_world.append(file_name) |
455 | 455 | ||
456 | cacheData.hashfn[file_name] = self.getVar('BB_HASHFILENAME', file_name, True) | ||
457 | |||
456 | # Touch this to make sure its in the cache | 458 | # Touch this to make sure its in the cache |
457 | self.getVar('__BB_DONT_CACHE', file_name, True) | 459 | self.getVar('__BB_DONT_CACHE', file_name, True) |
458 | self.getVar('__VARIANTS', file_name, True) | 460 | self.getVar('__VARIANTS', file_name, True) |
@@ -545,6 +547,7 @@ class CacheData: | |||
545 | self.preferred = {} | 547 | self.preferred = {} |
546 | self.tasks = {} | 548 | self.tasks = {} |
547 | self.basetaskhash = {} | 549 | self.basetaskhash = {} |
550 | self.hashfn = {} | ||
548 | 551 | ||
549 | """ | 552 | """ |
550 | Indirect Cache variables | 553 | Indirect Cache variables |
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index dff4ff7f3e..b5167126ee 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -757,7 +757,8 @@ class RunQueue: | |||
757 | self.cfgData = cfgData | 757 | self.cfgData = cfgData |
758 | self.rqdata = RunQueueData(self, cooker, cfgData, dataCache, taskData, targets) | 758 | self.rqdata = RunQueueData(self, cooker, cfgData, dataCache, taskData, targets) |
759 | 759 | ||
760 | self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1) or "perfile" | 760 | self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, True) or "perfile" |
761 | self.hashvalidate = bb.data.getVar("BB_HASHCHECK_FUNCTION", cfgData, True) or None | ||
761 | 762 | ||
762 | self.state = runQueuePrepare | 763 | self.state = runQueuePrepare |
763 | 764 | ||
@@ -1326,6 +1327,29 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
1326 | if len(self.sq_revdeps[task]) == 0: | 1327 | if len(self.sq_revdeps[task]) == 0: |
1327 | self.runq_buildable[task] = 1 | 1328 | self.runq_buildable[task] = 1 |
1328 | 1329 | ||
1330 | if self.rq.hashvalidate: | ||
1331 | sq_hash = [] | ||
1332 | sq_hashfn = [] | ||
1333 | sq_fn = [] | ||
1334 | sq_task = [] | ||
1335 | for task in range(len(self.sq_revdeps)): | ||
1336 | realtask = self.rqdata.runq_setscene[task] | ||
1337 | fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]] | ||
1338 | sq_fn.append(fn) | ||
1339 | sq_hashfn.append(self.rqdata.dataCache.hashfn[fn]) | ||
1340 | sq_hash.append(self.rqdata.runq_hash[realtask]) | ||
1341 | sq_task.append(self.rqdata.runq_task[realtask]) | ||
1342 | |||
1343 | call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" | ||
1344 | locs = { "sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.configuration.data } | ||
1345 | valid = bb.utils.better_eval(call, locs) | ||
1346 | for task in range(len(self.sq_revdeps)): | ||
1347 | if task not in valid: | ||
1348 | bb.msg.debug(2, bb.msg.domain.RunQueue, "No package found so skipping setscene task %s" % (self.rqdata.get_user_idstring(task))) | ||
1349 | self.task_failoutright(task) | ||
1350 | |||
1351 | #print(str(valid)) | ||
1352 | |||
1329 | bb.msg.note(1, bb.msg.domain.RunQueue, "Executing setscene Tasks") | 1353 | bb.msg.note(1, bb.msg.domain.RunQueue, "Executing setscene Tasks") |
1330 | 1354 | ||
1331 | self.rq.state = runQueueSceneRun | 1355 | self.rq.state = runQueueSceneRun |