diff options
Diffstat (limited to 'poky/bitbake/lib/bb/siggen.py')
-rw-r--r-- | poky/bitbake/lib/bb/siggen.py | 72 |
1 files changed, 24 insertions, 48 deletions
diff --git a/poky/bitbake/lib/bb/siggen.py b/poky/bitbake/lib/bb/siggen.py index c4ff9d8de1..d0a555654b 100644 --- a/poky/bitbake/lib/bb/siggen.py +++ b/poky/bitbake/lib/bb/siggen.py @@ -182,6 +182,11 @@ class SignatureGenerator(object): def exit(self): return +def build_pnid(mc, pn, taskname): + if mc: + return "mc:" + mc + ":" + pn + ":" + taskname + return pn + ":" + taskname + class SignatureGeneratorBasic(SignatureGenerator): """ """ @@ -309,15 +314,19 @@ class SignatureGeneratorBasic(SignatureGenerator): recipename = dataCaches[mc].pkg_fn[mcfn] self.tidtopn[tid] = recipename + # save hashfn for deps into siginfo? + for dep in deps: + (depmc, _, deptask, depmcfn) = bb.runqueue.split_tid_mcfn(dep) + dep_pn = dataCaches[depmc].pkg_fn[depmcfn] - for dep in sorted(deps, key=clean_basepath): - (depmc, _, _, depmcfn) = bb.runqueue.split_tid_mcfn(dep) - depname = dataCaches[depmc].pkg_fn[depmcfn] - if not self.rundep_check(mcfn, recipename, task, dep, depname, dataCaches): + if not self.rundep_check(mcfn, recipename, task, dep, dep_pn, dataCaches): continue + if dep not in self.taskhash: bb.fatal("%s is not in taskhash, caller isn't calling in dependency order?" % dep) - self.runtaskdeps[tid].append(dep) + + dep_pnid = build_pnid(depmc, dep_pn, deptask) + self.runtaskdeps[tid].append((dep_pnid, dep)) if task in dataCaches[mc].file_checksums[mcfn]: if self.checksum_cache: @@ -348,8 +357,8 @@ class SignatureGeneratorBasic(SignatureGenerator): def get_taskhash(self, tid, deps, dataCaches): data = self.basehash[tid] - for dep in self.runtaskdeps[tid]: - data += self.get_unihash(dep) + for dep in sorted(self.runtaskdeps[tid]): + data += self.get_unihash(dep[1]) for (f, cs) in self.file_checksum_values[tid]: if cs: @@ -414,7 +423,7 @@ class SignatureGeneratorBasic(SignatureGenerator): data['varvals'][dep] = self.datacaches[mc].siggen_varvals[mcfn][dep] if runtime and tid in self.taskhash: - data['runtaskdeps'] = self.runtaskdeps[tid] + data['runtaskdeps'] = [dep[0] for dep in sorted(self.runtaskdeps[tid])] data['file_checksum_values'] = [] for f,cs in self.file_checksum_values[tid]: if "/./" in f: @@ -422,8 +431,8 @@ class SignatureGeneratorBasic(SignatureGenerator): else: data['file_checksum_values'].append((os.path.basename(f), cs)) data['runtaskhashes'] = {} - for dep in data['runtaskdeps']: - data['runtaskhashes'][dep] = self.get_unihash(dep) + for dep in self.runtaskdeps[tid]: + data['runtaskhashes'][dep[0]] = self.get_unihash(dep[1]) data['taskhash'] = self.taskhash[tid] data['unihash'] = self.get_unihash(tid) @@ -793,39 +802,6 @@ def list_inline_diff(oldlist, newlist, colors=None): ret.append(item) return '[%s]' % (', '.join(ret)) -def clean_basepath(basepath): - basepath, dir, recipe_task = basepath.rsplit("/", 2) - cleaned = dir + '/' + recipe_task - - if basepath[0] == '/': - return cleaned - - if basepath.startswith("mc:") and basepath.count(':') >= 2: - mc, mc_name, basepath = basepath.split(":", 2) - mc_suffix = ':mc:' + mc_name - else: - mc_suffix = '' - - # mc stuff now removed from basepath. Whatever was next, if present will be the first - # suffix. ':/', recipe path start, marks the end of this. Something like - # 'virtual:a[:b[:c]]:/path...' (b and c being optional) - if basepath[0] != '/': - cleaned += ':' + basepath.split(':/', 1)[0] - - return cleaned + mc_suffix - -def clean_basepaths(a): - b = {} - for x in a: - b[clean_basepath(x)] = a[x] - return b - -def clean_basepaths_list(a): - b = [] - for x in a: - b.append(clean_basepath(x)) - return b - # Handled renamed fields def handle_renames(data): if 'basewhitelist' in data: @@ -994,11 +970,11 @@ def compare_sigfiles(a, b, recursecb=None, color=False, collapsed=False): a = a_data['runtaskdeps'][idx] b = b_data['runtaskdeps'][idx] if a_data['runtaskhashes'][a] != b_data['runtaskhashes'][b] and not collapsed: - changed.append("%s with hash %s\n changed to\n%s with hash %s" % (clean_basepath(a), a_data['runtaskhashes'][a], clean_basepath(b), b_data['runtaskhashes'][b])) + changed.append("%s with hash %s\n changed to\n%s with hash %s" % (a, a_data['runtaskhashes'][a], b, b_data['runtaskhashes'][b])) if changed: - clean_a = clean_basepaths_list(a_data['runtaskdeps']) - clean_b = clean_basepaths_list(b_data['runtaskdeps']) + clean_a = a_data['runtaskdeps'] + clean_b = b_data['runtaskdeps'] if clean_a != clean_b: output.append(color_format("{color_title}runtaskdeps changed:{color_default}\n%s") % list_inline_diff(clean_a, clean_b, colors)) else: @@ -1007,8 +983,8 @@ def compare_sigfiles(a, b, recursecb=None, color=False, collapsed=False): if 'runtaskhashes' in a_data and 'runtaskhashes' in b_data: - a = clean_basepaths(a_data['runtaskhashes']) - b = clean_basepaths(b_data['runtaskhashes']) + a = a_data['runtaskhashes'] + b = b_data['runtaskhashes'] changed, added, removed = dict_diff(a, b) if added: for dep in sorted(added): |