diff options
author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2017-04-07 10:01:44 +1200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-04-08 22:48:06 +0100 |
commit | 5b69eef40868180c59400624096d7ebbbbea446b (patch) | |
tree | cffc644d28fe44edfebf082dd0635757928f1cd4 /meta/lib | |
parent | 8cb472e4ed25e56ec0d9cf6d8d101d1ab6687a5b (diff) | |
download | openembedded-core-5b69eef40868180c59400624096d7ebbbbea446b.tar.gz openembedded-core-5b69eef40868180c59400624096d7ebbbbea446b.tar.bz2 openembedded-core-5b69eef40868180c59400624096d7ebbbbea446b.zip |
lib/oe/sstatesig: avoid reporting duplicate siginfo files from sstate
In find_siginfo(), which is used by bitbake-diffsigs among other things,
avoid adding a siginfo file from the sstate-cache where we've already
collected a sigdata file from the stamps directory with the same hash.
This avoids the possibility that the top two files (as picked by default
using the bitbake-diffsigs -t option) are for the same signature and
thus the tool would report no differences. In order to do that, just use
the hashfiles dict that we already have - we just need to change the
code to populate that even if we're collecting matching files without
looking for a fixed set of hashes (i.e. taskhashlist isn't set).
This replaces previous code in bitbake-diffsigs that attempted to filter
these out with limited success.
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oe/sstatesig.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index a76a031ba2..8d930134c9 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py @@ -254,9 +254,6 @@ def find_siginfo(pn, taskname, taskhashlist, d): import fnmatch import glob - if taskhashlist: - hashfiles = {} - if not taskname: # We have to derive pn and taskname key = pn @@ -266,8 +263,15 @@ def find_siginfo(pn, taskname, taskhashlist, d): if key.startswith('virtual:native:'): pn = pn + '-native' + hashfiles = {} filedates = {} + def get_hashval(siginfo): + if siginfo.endswith('.siginfo'): + return siginfo.rpartition(':')[2].partition('_')[0] + else: + return siginfo.rpartition('.')[2] + # First search in stamps dir localdata = d.createCopy() localdata.setVar('MULTIMACH_TARGET_SYS', '*') @@ -297,6 +301,8 @@ def find_siginfo(pn, taskname, taskhashlist, d): filedates[fullpath] = os.stat(fullpath).st_mtime except OSError: continue + hashval = get_hashval(fullpath) + hashfiles[hashval] = fullpath if not taskhashlist or (len(filedates) < 2 and not foundall): # That didn't work, look in sstate-cache @@ -320,9 +326,11 @@ def find_siginfo(pn, taskname, taskhashlist, d): matchedfiles = glob.glob(filespec) for fullpath in matchedfiles: - if taskhashlist: - hashfiles[hashval] = fullpath - else: + actual_hashval = get_hashval(fullpath) + if actual_hashval in hashfiles: + continue + hashfiles[hashval] = fullpath + if not taskhashlist: try: filedates[fullpath] = os.stat(fullpath).st_mtime except: |