mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 12:49:46 +00:00
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) (From OE-Core rev: 66a0d184d8f55a8da03de9fedb18d166b80b198b) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Armin Kuster <akuster808@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
5686f4e1fe
commit
00a859afd0
@@ -301,6 +301,8 @@ python buildhistory_emit_outputsigs() {
|
|||||||
if not "task" in (d.getVar('BUILDHISTORY_FEATURES') or "").split():
|
if not "task" in (d.getVar('BUILDHISTORY_FEATURES') or "").split():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
|
||||||
taskoutdir = os.path.join(d.getVar('BUILDHISTORY_DIR'), 'task', 'output')
|
taskoutdir = os.path.join(d.getVar('BUILDHISTORY_DIR'), 'task', 'output')
|
||||||
bb.utils.mkdirhier(taskoutdir)
|
bb.utils.mkdirhier(taskoutdir)
|
||||||
currenttask = d.getVar('BB_CURRENTTASK')
|
currenttask = d.getVar('BB_CURRENTTASK')
|
||||||
@@ -314,7 +316,17 @@ python buildhistory_emit_outputsigs() {
|
|||||||
if fname == 'fixmepath':
|
if fname == 'fixmepath':
|
||||||
continue
|
continue
|
||||||
fullpath = os.path.join(root, fname)
|
fullpath = os.path.join(root, fname)
|
||||||
filesigs[os.path.relpath(fullpath, cwd)] = bb.utils.sha256_file(fullpath)
|
try:
|
||||||
|
if os.path.islink(fullpath):
|
||||||
|
sha256 = hashlib.sha256(os.readlink(fullpath).encode('utf-8')).hexdigest()
|
||||||
|
elif os.path.isfile(fullpath):
|
||||||
|
sha256 = bb.utils.sha256_file(fullpath)
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
except OSError:
|
||||||
|
bb.warn('buildhistory: unable to read %s to get output signature' % fullpath)
|
||||||
|
continue
|
||||||
|
filesigs[os.path.relpath(fullpath, cwd)] = sha256
|
||||||
with open(taskfile, 'w') as f:
|
with open(taskfile, 'w') as f:
|
||||||
for fpath, fsig in sorted(filesigs.items(), key=lambda item: item[0]):
|
for fpath, fsig in sorted(filesigs.items(), key=lambda item: item[0]):
|
||||||
f.write('%s %s\n' % (fpath, fsig))
|
f.write('%s %s\n' % (fpath, fsig))
|
||||||
|
|||||||
Reference in New Issue
Block a user