summaryrefslogtreecommitdiffstats
path: root/meta/classes/buildhistory.bbclass
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2017-05-09 12:38:39 +1200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-06-23 11:44:12 +0100
commit43ceb87454f49707750833b3130c15290b12ccfd (patch)
tree9ed02bdbd9c0dd3d77411c0f1ebda182b03d2148 /meta/classes/buildhistory.bbclass
parent20565a96934a0de2ede7ca419020c0c29725aaea (diff)
downloadpoky-43ceb87454f49707750833b3130c15290b12ccfd.tar.gz
classes/buildhistory: fix failures collecting output signatures
It's possible for tasks to stage symlinks that point to non-existent files; an example is ncurses-native.do_populate_sysroot. There wasn't any error checking here so this broke the build when "task" was included in BUILDHISTORY_FEATURES. In any case we shouldn't be following symlinks and getting the sha256sum of the link target - we need concern ourselves only with the target path, so check if the file is a link and sha256 the target path instead if it is. If it's neither a regular file nor a symlink (perhaps a pipe or a device), just skip it. (From OE-Core rev: f60520d97f53dafe783f61eb58fe249798a1e1be) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/buildhistory.bbclass')
-rw-r--r--meta/classes/buildhistory.bbclass14
1 files changed, 13 insertions, 1 deletions
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass
index 601b29f5a1..81784eef21 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -301,6 +301,8 @@ python buildhistory_emit_outputsigs() {
301 if not "task" in (d.getVar('BUILDHISTORY_FEATURES') or "").split(): 301 if not "task" in (d.getVar('BUILDHISTORY_FEATURES') or "").split():
302 return 302 return
303 303
304 import hashlib
305
304 taskoutdir = os.path.join(d.getVar('BUILDHISTORY_DIR'), 'task', 'output') 306 taskoutdir = os.path.join(d.getVar('BUILDHISTORY_DIR'), 'task', 'output')
305 bb.utils.mkdirhier(taskoutdir) 307 bb.utils.mkdirhier(taskoutdir)
306 currenttask = d.getVar('BB_CURRENTTASK') 308 currenttask = d.getVar('BB_CURRENTTASK')
@@ -314,7 +316,17 @@ python buildhistory_emit_outputsigs() {
314 if fname == 'fixmepath': 316 if fname == 'fixmepath':
315 continue 317 continue
316 fullpath = os.path.join(root, fname) 318 fullpath = os.path.join(root, fname)
317 filesigs[os.path.relpath(fullpath, cwd)] = bb.utils.sha256_file(fullpath) 319 try:
320 if os.path.islink(fullpath):
321 sha256 = hashlib.sha256(os.readlink(fullpath).encode('utf-8')).hexdigest()
322 elif os.path.isfile(fullpath):
323 sha256 = bb.utils.sha256_file(fullpath)
324 else:
325 continue
326 except OSError:
327 bb.warn('buildhistory: unable to read %s to get output signature' % fullpath)
328 continue
329 filesigs[os.path.relpath(fullpath, cwd)] = sha256
318 with open(taskfile, 'w') as f: 330 with open(taskfile, 'w') as f:
319 for fpath, fsig in sorted(filesigs.items(), key=lambda item: item[0]): 331 for fpath, fsig in sorted(filesigs.items(), key=lambda item: item[0]):
320 f.write('%s %s\n' % (fpath, fsig)) 332 f.write('%s %s\n' % (fpath, fsig))