summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-12 13:59:30 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-16 13:53:17 +0100
commit5333f31fc7555f0a39246d4fcafa71debf71abe2 (patch)
tree80521386c4821015d2dad22f5e39adb64a78b52a /bitbake
parentbe564f82ca9e94965fcf27fe5f96522824ae16fd (diff)
downloadpoky-5333f31fc7555f0a39246d4fcafa71debf71abe2.tar.gz
bitbake: runqueue: Abstract hash verification function
Pull the common pieces of the hash verification code into a single function and reduce code duplication. (Bitbake rev: d0c39e05cef841c6f29cc6c919df6cbf271a9bda) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/runqueue.py82
1 files changed, 42 insertions, 40 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 103d42df2b..00c71070d2 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1376,10 +1376,43 @@ class RunQueue:
1376 cache[tid] = iscurrent 1376 cache[tid] = iscurrent
1377 return iscurrent 1377 return iscurrent
1378 1378
1379 def validate_hash(self, *, sq_fn, sq_task, sq_hash, sq_hashfn, siginfo, sq_unihash, d): 1379 def validate_hashes(self, tocheck, data, presentcount=None, siginfo=False):
1380 valid = set()
1381 if self.hashvalidate:
1382 sq_hash = []
1383 sq_hashfn = []
1384 sq_unihash = []
1385 sq_fn = []
1386 sq_taskname = []
1387 sq_task = []
1388 for tid in tocheck:
1389 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
1390
1391 sq_fn.append(fn)
1392 sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn])
1393 sq_hash.append(self.rqdata.runtaskentries[tid].hash)
1394 sq_unihash.append(self.rqdata.runtaskentries[tid].unihash)
1395 sq_taskname.append(taskname)
1396 sq_task.append(tid)
1397
1398 if presentcount is not None:
1399 data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", presentcount)
1400
1401 valid_ids = self.validate_hash(sq_fn, sq_taskname, sq_hash, sq_hashfn, siginfo, sq_unihash, data, presentcount)
1402
1403 if presentcount is not None:
1404 data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT")
1405
1406 for v in valid_ids:
1407 valid.add(sq_task[v])
1408
1409 return valid
1410
1411 def validate_hash(self, sq_fn, sq_task, sq_hash, sq_hashfn, siginfo, sq_unihash, d, presentcount):
1380 locs = {"sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, 1412 locs = {"sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn,
1381 "sq_unihash" : sq_unihash, "siginfo" : siginfo, "d" : d} 1413 "sq_unihash" : sq_unihash, "siginfo" : siginfo, "d" : d}
1382 1414
1415 # Backwards compatibility
1383 hashvalidate_args = ("(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo, sq_unihash=sq_unihash)", 1416 hashvalidate_args = ("(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo, sq_unihash=sq_unihash)",
1384 "(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo)", 1417 "(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=siginfo)",
1385 "(sq_fn, sq_task, sq_hash, sq_hashfn, d)") 1418 "(sq_fn, sq_task, sq_hash, sq_hashfn, d)")
@@ -1564,16 +1597,8 @@ class RunQueue:
1564 1597
1565 def print_diffscenetasks(self): 1598 def print_diffscenetasks(self):
1566 1599
1567 valid = []
1568 sq_hash = []
1569 sq_hashfn = []
1570 sq_unihash = []
1571 sq_fn = []
1572 sq_taskname = []
1573 sq_task = []
1574 noexec = [] 1600 noexec = []
1575 stamppresent = [] 1601 tocheck = set()
1576 valid_new = set()
1577 1602
1578 for tid in self.rqdata.runtaskentries: 1603 for tid in self.rqdata.runtaskentries:
1579 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) 1604 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
@@ -1583,18 +1608,9 @@ class RunQueue:
1583 noexec.append(tid) 1608 noexec.append(tid)
1584 continue 1609 continue
1585 1610
1586 sq_fn.append(fn) 1611 tocheck.add(tid)
1587 sq_hashfn.append(self.rqdata.dataCaches[mc].hashfn[taskfn])
1588 sq_hash.append(self.rqdata.runtaskentries[tid].hash)
1589 sq_unihash.append(self.rqdata.runtaskentries[tid].unihash)
1590 sq_taskname.append(taskname)
1591 sq_task.append(tid)
1592 1612
1593 valid = self.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn, 1613 valid_new = self.validate_hashes(tocheck, self.cooker.data, None, True)
1594 siginfo=True, sq_unihash=sq_unihash, d=self.cooker.data)
1595
1596 for v in valid:
1597 valid_new.add(sq_task[v])
1598 1614
1599 # Tasks which are both setscene and noexec never care about dependencies 1615 # Tasks which are both setscene and noexec never care about dependencies
1600 # We therefore find tasks which are setscene and noexec and mark their 1616 # We therefore find tasks which are setscene and noexec and mark their
@@ -2501,14 +2517,10 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
2501 rqdata.init_progress_reporter.finish() 2517 rqdata.init_progress_reporter.finish()
2502 2518
2503 if rq.hashvalidate: 2519 if rq.hashvalidate:
2504 sq_hash = []
2505 sq_hashfn = []
2506 sq_unihash = []
2507 sq_fn = []
2508 sq_taskname = []
2509 sq_task = []
2510 noexec = [] 2520 noexec = []
2511 stamppresent = [] 2521 stamppresent = []
2522 tocheck = set()
2523
2512 for tid in sqdata.sq_revdeps: 2524 for tid in sqdata.sq_revdeps:
2513 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) 2525 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2514 2526
@@ -2532,23 +2544,13 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
2532 sqrq.sq_task_skip(tid) 2544 sqrq.sq_task_skip(tid)
2533 continue 2545 continue
2534 2546
2535 sq_fn.append(fn) 2547 tocheck.add(tid)
2536 sq_hashfn.append(rqdata.dataCaches[mc].hashfn[taskfn])
2537 sq_hash.append(rqdata.runtaskentries[tid].hash)
2538 sq_unihash.append(rqdata.runtaskentries[tid].unihash)
2539 sq_taskname.append(taskname)
2540 sq_task.append(tid)
2541
2542 cooker.data.setVar("BB_SETSCENE_STAMPCURRENT_COUNT", len(stamppresent))
2543
2544 valid = rq.validate_hash(sq_fn=sq_fn, sq_task=sq_taskname, sq_hash=sq_hash, sq_hashfn=sq_hashfn,
2545 siginfo=False, sq_unihash=sq_unihash, d=cooker.data)
2546 2548
2547 cooker.data.delVar("BB_SETSCENE_STAMPCURRENT_COUNT") 2549 valid = rq.validate_hashes(tocheck, cooker.data, len(stamppresent), False)
2548 2550
2549 valid_new = stamppresent 2551 valid_new = stamppresent
2550 for v in valid: 2552 for v in valid:
2551 valid_new.append(sq_task[v]) 2553 valid_new.append(v)
2552 2554
2553 for tid in sqdata.sq_revdeps: 2555 for tid in sqdata.sq_revdeps:
2554 if tid not in valid_new and tid not in noexec: 2556 if tid not in valid_new and tid not in noexec: