diff options
author | Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> | 2017-08-08 09:57:17 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-08-11 00:08:33 +0100 |
commit | a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866 (patch) | |
tree | e49d35a1e822f20ec45ae9ff4f2b29d0837ab03d | |
parent | 3619a2fbe3d5bb718fdab8ee55728b22acb892cf (diff) | |
download | openembedded-core-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.tar.gz openembedded-core-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.tar.bz2 openembedded-core-a2e2f434cd8d68b69e1ccdb7d7c17c0c73289866.zip |
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]
Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r-- | meta/lib/oeqa/selftest/cases/sstatetests.py | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py index 0b36027918..47900886a3 100644 --- a/meta/lib/oeqa/selftest/cases/sstatetests.py +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py @@ -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.") |