bitbake-diffsigs: consider the situation where sigdata and siginfo files having the same hash values
cover bitbake-diffsigs: consider the situation where sigdata and siginfo files having the same hash values
The following changes since commit 8ce2f2c3549248b2aa1259ceb28ed03be166ac6f:
maintainers.inc: Became maintainer of python2 and python3 (2015-03-09 16:01:08 +0000)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib ChenQi/bitbake-diffsigs-duplicates
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=ChenQi/bitbake-diffsigs-duplicates
Chen Qi (1):
bitbake-diffsigs: consider the situation where sigdata and siginfo
files having the same hash values
bitbake/bin/bitbake-diffsigs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
Signature · 1 line
1.9.1
PATCH 1/1 bitbake-diffsigs: consider the situation where sigdata and siginfo files having the same hash values
For now, `bitbake-diffsigs -t <recipe> <task>' doesn't work. It always outputs nothing.
The problem is that bitbake-diffsigs are comparing sigdata and siginfo files that have the same hash value. This is not what we want. These two files are actually duplicates considering the purpose of bitbake-diffsigs. So we need to remove one of them so that bitbake-diffsigs could actually compare the correct signature files.
--- bitbake/bin/bitbake-diffsigs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
bitbake/bin/bitbake-diffsigs +17 -1
@@ -46,6 +46,12 @@ logger = logger_create('bitbake-diffsigs') def find_compare_task(bbhandler, pn, taskname): """ Find the most recent signature files for the specified PN/task and compare them """ + def get_hashval(siginfo): + if siginfo.endswith('.siginfo'): + return siginfo.rpartition(':')[2].partition('_')[0] + else: + return siginfo.rpartition('.')[2] + if not hasattr(bb.siggen, 'find_siginfo'): logger.error('Metadata does not support finding signature data files') sys.exit(1)
@@ -54,7 +60,7 @@ def find_compare_task(bbhandler, pn, taskname): taskname = 'do_%s' % taskname filedates = bb.siggen.find_siginfo(pn, taskname, None, bbhandler.config_data) - latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-2:] + latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-3:] if not latestfiles: logger.error('No sigdata files found matching %s %s' % (pn, taskname)) sys.exit(1)
@@ -62,6 +68,16 @@ def find_compare_task(bbhandler, pn, taskname): logger.error('Only one matching sigdata file found for the specified task (%s %s)' % (pn, taskname)) sys.exit(1) else: + # It's possible that latestfiles contain 3 elements and the first two have the same hash value. + # In this case, we delete the second element. + # The above case is actually the most common one. Because we may have sigdata file and siginfo + # file having the same hash value. Comparing such two files makes no sense. + if len(latestfiles) == 3: + hash0 = get_hashval(latestfiles[0]) + hash1 = get_hashval(latestfiles[1]) + if hash0 == hash1: + latestfiles.pop(1) + # Define recursion callback def recursecb(key, hash1, hash2): hashes = [hash1, hash2]
Signature · 1 line
1.9.1
ping
Any comment on this one?
Best Regards,
Chen Qi
Quoted 57 lines · Chen Qi
For now, `bitbake-diffsigs -t <recipe> <task>' doesn't work. It always outputs nothing.
The problem is that bitbake-diffsigs are comparing sigdata and siginfo files that have the same hash value. This is not what we want. These two files are actually duplicates considering the purpose of bitbake-diffsigs. So we need to remove one of them so that bitbake-diffsigs could actually compare the correct signature files.
Signed-off-by Chen Qi <[email protected]>--- bitbake/bin/bitbake-diffsigs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)bitbake/bin/bitbake-diffsigs +17
-1@@ -46,6 +46,12 @@ logger = logger_create('bitbake-diffsigs') def find_compare_task(bbhandler, pn, taskname): """ Find the most recent signature files for the specified PN/task and compare them """ + def get_hashval(siginfo): + if siginfo.endswith('.siginfo'): + return siginfo.rpartition(':')[2].partition('_')[0] + else: + return siginfo.rpartition('.')[2] + if not hasattr(bb.siggen, 'find_siginfo'): logger.error('Metadata does not support finding signature data files') sys.exit(1)@@ -54,7 +60,7 @@ def find_compare_task(bbhandler, pn, taskname): taskname = 'do_%s' % taskname filedates = bb.siggen.find_siginfo(pn, taskname, None, bbhandler.config_data) - latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-2:] + latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-3:] if not latestfiles: logger.error('No sigdata files found matching %s %s' % (pn, taskname)) sys.exit(1)@@ -62,6 +68,16 @@ def find_compare_task(bbhandler, pn, taskname): logger.error('Only one matching sigdata file found for the specified task (%s %s)' % (pn, taskname)) sys.exit(1) else: + # It's possible that latestfiles contain 3 elements and the first two have the same hash value. + # In this case, we delete the second element. + # The above case is actually the most common one. Because we may have sigdata file and siginfo + # file having the same hash value. Comparing such two files makes no sense. + if len(latestfiles) == 3: + hash0 = get_hashval(latestfiles[0]) + hash1 = get_hashval(latestfiles[1]) + if hash0 == hash1: + latestfiles.pop(1) + # Define recursion callback def recursecb(key, hash1, hash2): hashes = [hash1, hash2]
Quoted 7 lines · ChenQi
ping
Any comment on this one?
Best Regards,
Chen Qi
Seems like this would be an important fix to have, from my perspective.. Honestly I didn't even know about the -t argument until I saw this :)
Signature · 5 lines
Christopher Larson clarson at kergoth dot com Founder - BitBake, OpenEmbedded, OpenZaurus Maintainer - Tslib Senior Software Engineer, Mentor Graphics