diff options
| author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-10-17 14:40:38 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-10-18 10:59:27 +0100 |
| commit | 7e9212712817a7c10b9aae7a26de3de3a4f18611 (patch) | |
| tree | 3751a50e1dde2576bd4b9ec3c6fb1f2da50d548e /bitbake/lib/bb/data.py | |
| parent | f7f5e30667e1ad8e1ca76ee331be2843f2976bfa (diff) | |
| download | poky-7e9212712817a7c10b9aae7a26de3de3a4f18611.tar.gz | |
bitbake: data/siggen: Extract task hash generation code into a function
By creating a standalone function, we can add better functional testing
of this code.
(Bitbake rev: 796a20d24dc18479de1975a37b9e52a5ac75c73f)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/data.py')
| -rw-r--r-- | bitbake/lib/bb/data.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index fde4cba6bb..d66d98cc8b 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
| @@ -38,6 +38,7 @@ the speed is more critical here. | |||
| 38 | # Based on functions from the base bb module, Copyright 2003 Holger Schurig | 38 | # Based on functions from the base bb module, Copyright 2003 Holger Schurig |
| 39 | 39 | ||
| 40 | import sys, os, re | 40 | import sys, os, re |
| 41 | import hashlib | ||
| 41 | if sys.argv[0][-5:] == "pydoc": | 42 | if sys.argv[0][-5:] == "pydoc": |
| 42 | path = os.path.dirname(os.path.dirname(sys.argv[1])) | 43 | path = os.path.dirname(os.path.dirname(sys.argv[1])) |
| 43 | else: | 44 | else: |
| @@ -405,6 +406,43 @@ def generate_dependencies(d): | |||
| 405 | #print "For %s: %s" % (task, str(deps[task])) | 406 | #print "For %s: %s" % (task, str(deps[task])) |
| 406 | return tasklist, deps, values | 407 | return tasklist, deps, values |
| 407 | 408 | ||
| 409 | def generate_dependency_hash(tasklist, gendeps, lookupcache, whitelist, fn): | ||
| 410 | taskdeps = {} | ||
| 411 | basehash = {} | ||
| 412 | |||
| 413 | for task in tasklist: | ||
| 414 | data = lookupcache[task] | ||
| 415 | |||
| 416 | if data is None: | ||
| 417 | bb.error("Task %s from %s seems to be empty?!" % (task, fn)) | ||
| 418 | data = '' | ||
| 419 | |||
| 420 | gendeps[task] -= whitelist | ||
| 421 | newdeps = gendeps[task] | ||
| 422 | seen = set() | ||
| 423 | while newdeps: | ||
| 424 | nextdeps = newdeps | ||
| 425 | seen |= nextdeps | ||
| 426 | newdeps = set() | ||
| 427 | for dep in nextdeps: | ||
| 428 | if dep in whitelist: | ||
| 429 | continue | ||
| 430 | gendeps[dep] -= whitelist | ||
| 431 | newdeps |= gendeps[dep] | ||
| 432 | newdeps -= seen | ||
| 433 | |||
| 434 | alldeps = sorted(seen) | ||
| 435 | for dep in alldeps: | ||
| 436 | data = data + dep | ||
| 437 | var = lookupcache[dep] | ||
| 438 | if var is not None: | ||
| 439 | data = data + str(var) | ||
| 440 | k = fn + "." + task | ||
| 441 | basehash[k] = hashlib.md5(data.encode("utf-8")).hexdigest() | ||
| 442 | taskdeps[task] = alldeps | ||
| 443 | |||
| 444 | return taskdeps, basehash | ||
| 445 | |||
| 408 | def inherits_class(klass, d): | 446 | def inherits_class(klass, d): |
| 409 | val = d.getVar('__inherit_cache', False) or [] | 447 | val = d.getVar('__inherit_cache', False) or [] |
| 410 | needle = os.path.join('classes', '%s.bbclass' % klass) | 448 | needle = os.path.join('classes', '%s.bbclass' % klass) |
