mirror of
https://git.yoctoproject.org/poky
synced 2026-04-18 03:32:13 +02:00
sstatetests: limit the number of signature comparisons when differ
For perfomance reasons, limit the number of signature comparisons when stamps differ. The limit set is hardcoded to 20. [YOCTO #11651] (From OE-Core rev: a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866) Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
6309590b39
commit
d6823e947b
@@ -458,6 +458,24 @@ http_proxy = "http://example.com/"
|
||||
base = os.sep.join(root.rsplit(os.sep, 2)[-2:] + [name])
|
||||
f[base] = shash
|
||||
return f
|
||||
|
||||
def compare_sigfiles(files, files1, files2, compare=False):
|
||||
for k in files:
|
||||
if k in files1 and k in files2:
|
||||
print("%s differs:" % k)
|
||||
if compare:
|
||||
sigdatafile1 = self.topdir + "/tmp-sstatesamehash/stamps/" + k + "." + files1[k]
|
||||
sigdatafile2 = self.topdir + "/tmp-sstatesamehash2/stamps/" + k + "." + files2[k]
|
||||
output = bb.siggen.compare_sigfiles(sigdatafile1, sigdatafile2)
|
||||
if output:
|
||||
print('\n'.join(output))
|
||||
elif k in files1 and k not in files2:
|
||||
print("%s in files1" % k)
|
||||
elif k not in files1 and k in files2:
|
||||
print("%s in files2" % k)
|
||||
else:
|
||||
assert "shouldn't reach here"
|
||||
|
||||
files1 = get_files(self.topdir + "/tmp-sstatesamehash/stamps/")
|
||||
files2 = get_files(self.topdir + "/tmp-sstatesamehash2/stamps/")
|
||||
# Remove items that are identical in both sets
|
||||
@@ -468,18 +486,11 @@ http_proxy = "http://example.com/"
|
||||
# No changes, so we're done
|
||||
return
|
||||
|
||||
for k in files1.keys() | files2.keys():
|
||||
if k in files1 and k in files2:
|
||||
print("%s differs:" % k)
|
||||
sigdatafile1 = self.topdir + "/tmp-sstatesamehash/stamps/" + k + "." + files1[k]
|
||||
sigdatafile2 = self.topdir + "/tmp-sstatesamehash2/stamps/" + k + "." + files2[k]
|
||||
output = bb.siggen.compare_sigfiles(sigdatafile1, sigdatafile2)
|
||||
if output:
|
||||
print('\n'.join(output))
|
||||
elif k in files1 and k not in files2:
|
||||
print("%s in files1" % k)
|
||||
elif k not in files1 and k in files2:
|
||||
print("%s in files2" % k)
|
||||
else:
|
||||
assert "shouldn't reach here"
|
||||
files = list(files1.keys() | files2.keys())
|
||||
# this is an expensive computation, thus just compare the first 'max_sigfiles_to_compare' k files
|
||||
max_sigfiles_to_compare = 20
|
||||
first, rest = files[:max_sigfiles_to_compare], files[max_sigfiles_to_compare:]
|
||||
compare_sigfiles(first, files1.keys(), files2.keys(), compare=True)
|
||||
compare_sigfiles(rest, files1.keys(), files2.keys(), compare=False)
|
||||
|
||||
self.fail("sstate hashes not identical.")
|
||||
|
||||
Reference in New Issue
Block a user