summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/siggen.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-10-17 14:40:38 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-10-18 10:59:27 +0100
commit7e9212712817a7c10b9aae7a26de3de3a4f18611 (patch)
tree3751a50e1dde2576bd4b9ec3c6fb1f2da50d548e /bitbake/lib/bb/siggen.py
parentf7f5e30667e1ad8e1ca76ee331be2843f2976bfa (diff)
downloadpoky-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/siggen.py')
-rw-r--r--bitbake/lib/bb/siggen.py37
1 files changed, 4 insertions, 33 deletions
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index e9bb51d736..03c824ec38 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -110,42 +110,13 @@ class SignatureGeneratorBasic(SignatureGenerator):
110 ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1') 110 ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1')
111 tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d) 111 tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d)
112 112
113 taskdeps = {} 113 taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, self.basewhitelist, fn)
114 basehash = {}
115 114
116 for task in tasklist: 115 for task in tasklist:
117 data = lookupcache[task]
118
119 if data is None:
120 bb.error("Task %s from %s seems to be empty?!" % (task, fn))
121 data = ''
122
123 gendeps[task] -= self.basewhitelist
124 newdeps = gendeps[task]
125 seen = set()
126 while newdeps:
127 nextdeps = newdeps
128 seen |= nextdeps
129 newdeps = set()
130 for dep in nextdeps:
131 if dep in self.basewhitelist:
132 continue
133 gendeps[dep] -= self.basewhitelist
134 newdeps |= gendeps[dep]
135 newdeps -= seen
136
137 alldeps = sorted(seen)
138 for dep in alldeps:
139 data = data + dep
140 var = lookupcache[dep]
141 if var is not None:
142 data = data + str(var)
143 datahash = hashlib.md5(data.encode("utf-8")).hexdigest()
144 k = fn + "." + task 116 k = fn + "." + task
145 if not ignore_mismatch and k in self.basehash and self.basehash[k] != datahash: 117 if not ignore_mismatch and k in self.basehash and self.basehash[k] != basehash[k]:
146 bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (k, self.basehash[k], datahash)) 118 bb.error("When reparsing %s, the basehash value changed from %s to %s. The metadata is not deterministic and this needs to be fixed." % (k, self.basehash[k], basehash[k]))
147 self.basehash[k] = datahash 119 self.basehash[k] = basehash[k]
148 taskdeps[task] = alldeps
149 120
150 self.taskdeps[fn] = taskdeps 121 self.taskdeps[fn] = taskdeps
151 self.gendeps[fn] = gendeps 122 self.gendeps[fn] = gendeps