diff options
author | Joshua Watt <jpewhacker@gmail.com> | 2018-12-18 21:10:30 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-01-03 22:47:11 +0000 |
commit | 445acdffe0a75bf9ce94c1fc31bebc7c5bd60be8 (patch) | |
tree | a51330507bcd594f550d1283975262b241a07ab0 /bitbake/lib | |
parent | 3b5bdb227b91c6a37338311d7b6ffda798bf5cc8 (diff) | |
download | poky-445acdffe0a75bf9ce94c1fc31bebc7c5bd60be8.tar.gz |
bitbake: runqueue: Pass unique hash to hash validate
If the unique hash is being used to track task dependencies, the hash
validation function needs to know about it in order to properly validate
the hash.
[YOCTO #13030]
(Bitbake rev: 9a529bb2658a4046dafbf32e1eb503d84e64e947)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index de57dcb37b..f44eff4675 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -1378,6 +1378,26 @@ class RunQueue: | |||
1378 | cache[tid] = iscurrent | 1378 | cache[tid] = iscurrent |
1379 | return iscurrent | 1379 | return iscurrent |
1380 | 1380 | ||
1381 | def validate_hash(self, *, sq_fn, sq_task, sq_hash, sq_hashfn, siginfo, sq_unihash, d): | ||
1382 | locs = {"sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, | ||
1383 | "sq_unihash" : sq_unihash, "siginfo" : siginfo, "d" : d} | ||
1384 | |||
1385 | hashvalidate_args = ("(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo, sq_unihash=sq_unihash)", | ||
1386 | "(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo)", | ||
1387 | "(sq_fn, sq_task, sq_hash, sq_hashfn, d)") | ||
1388 | |||
1389 | for args in hashvalidate_args[:-1]: | ||
1390 | try: | ||
1391 | call = self.hashvalidate + args | ||
1392 | return bb.utils.better_eval(call, locs) | ||
1393 | except TypeError: | ||
1394 | continue | ||
1395 | |||
1396 | # Call the last entry without a try...catch to propagate any thrown | ||
1397 | # TypeError | ||
1398 | call = self.hashvalidate + hashvalidate_args[-1] | ||
1399 | return bb.utils.better_eval(call, locs) | ||
1400 | |||
1381 | def _execute_runqueue(self): | 1401 | def _execute_runqueue(self): |
1382 | """ | 1402 | """ |
1383 | Run the tasks in a queue prepared by rqdata.prepare() | 1403 | Run the tasks in a queue prepared by rqdata.prepare() |
@@ -1549,6 +1569,7 @@ class RunQueue: | |||
1549 | valid = [] | 1569 | valid = [] |
1550 | sq_hash = [] | 1570 | sq_hash = [] |
1551 | sq_hashfn = [] | 1571 | sq_hashfn = [] |
1572 | sq_unihash = [] | ||
1552 | sq_fn = [] | 1573 | sq_fn = [] |
1553 | sq_taskname = [] | 1574 | sq_taskname = [] |
1554 | sq_task = [] | 1575 | sq_task = [] |
@@ -1567,16 +1588,13 @@ class RunQueue: | |||
1567 | sq_fn.append(fn) | 1588 | sq_fn.append(fn) |
1568 | sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn]) | 1589 | sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn]) |
1569 | sq_hash.append(self.rqdata.runtaskentries[tid].hash) | 1590 | sq_hash.append(self.rqdata.runtaskentries[tid].hash) |
1591 | sq_unihash.append(self.rqdata.runtaskentries[tid].unihash) | ||
1570 | sq_taskname.append(taskname) | 1592 | sq_taskname.append(taskname) |
1571 | sq_task.append(tid) | 1593 | sq_task.append(tid) |
1572 | locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.data } | 1594 | |
1573 | try: | 1595 | valid = self.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn, |
1574 | call = self.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=True)" | 1596 | siginfo=True, sq_unihash=sq_unihash, d=self.cooker.data) |
1575 | valid = bb.utils.better_eval(call, locs) | 1597 | |
1576 | # Handle version with no siginfo parameter | ||
1577 | except TypeError: | ||
1578 | call = self.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" | ||
1579 | valid = bb.utils.better_eval(call, locs) | ||
1580 | for v in valid: | 1598 | for v in valid: |
1581 | valid_new.add(sq_task[v]) | 1599 | valid_new.add(sq_task[v]) |
1582 | 1600 | ||
@@ -2293,6 +2311,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
2293 | if self.rq.hashvalidate: | 2311 | if self.rq.hashvalidate: |
2294 | sq_hash = [] | 2312 | sq_hash = [] |
2295 | sq_hashfn = [] | 2313 | sq_hashfn = [] |
2314 | sq_unihash = [] | ||
2296 | sq_fn = [] | 2315 | sq_fn = [] |
2297 | sq_taskname = [] | 2316 | sq_taskname = [] |
2298 | sq_task = [] | 2317 | sq_task = [] |
@@ -2324,14 +2343,14 @@ class RunQueueExecuteScenequeue(RunQueueExecute): | |||
2324 | sq_fn.append(fn) | 2343 | sq_fn.append(fn) |
2325 | sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn]) | 2344 | sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn]) |
2326 | sq_hash.append(self.rqdata.runtaskentries[tid].hash) | 2345 | sq_hash.append(self.rqdata.runtaskentries[tid].hash) |
2346 | sq_unihash.append(self.rqdata.runtaskentries[tid].unihash) | ||
2327 | sq_taskname.append(taskname) | 2347 | sq_taskname.append(taskname) |
2328 | sq_task.append(tid) | 2348 | sq_task.append(tid) |
2329 | 2349 | ||
2330 | self.cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent)) | 2350 | self.cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent)) |
2331 | 2351 | ||
2332 | call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)" | 2352 | valid = self.rq.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn, |
2333 | locs = { "sq_fn" : sq_fn, "sq_task" : sq_taskname, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.data } | 2353 | siginfo=False, sq_unihash=sq_unihash, d=self.cooker.data) |
2334 | valid = bb.utils.better_eval(call, locs) | ||
2335 | 2354 | ||
2336 | self.cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT") | 2355 | self.cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT") |
2337 | 2356 | ||