From patchwork Fri Mar 18 10:43:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Reyna, David" X-Patchwork-Id: 5446 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1E4AC433EF for ; Fri, 18 Mar 2022 10:43:13 +0000 (UTC) Received: from mail1.wrs.com (mail1.wrs.com [147.11.3.146]) by mx.groups.io with SMTP id smtpd.web12.8045.1647600192697210090 for ; Fri, 18 Mar 2022 03:43:12 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: windriver.com, ip: 147.11.3.146, mailfrom: david.reyna@windriver.com) Received: from ala-exchng01.corp.ad.wrs.com (ala-exchng01.corp.ad.wrs.com [147.11.82.252]) by mail1.wrs.com (8.15.2/8.15.2) with ESMTPS id 22IAh56Q006041 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Fri, 18 Mar 2022 03:43:10 -0700 Received: from ALA-EXCHNG02.corp.ad.wrs.com (147.11.82.254) by ala-exchng01.corp.ad.wrs.com (147.11.82.252) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Fri, 18 Mar 2022 03:43:05 -0700 Received: from ala-exchng01.corp.ad.wrs.com (147.11.82.252) by ALA-EXCHNG02.corp.ad.wrs.com (147.11.82.254) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Fri, 18 Mar 2022 03:43:04 -0700 Received: from ala-lpggp2.wrs.com (147.11.105.123) by ala-exchng01.corp.ad.wrs.com (147.11.82.252) with Microsoft SMTP Server id 15.1.2242.12 via Frontend Transport; Fri, 18 Mar 2022 03:43:04 -0700 From: David Reyna To: Subject: [PATCH] toaster: handle changes to "ImagePkgList" event Date: Fri, 18 Mar 2022 03:43:04 -0700 Message-ID: <20220318104304.18460-1-david.reyna@windriver.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 18 Mar 2022 10:43:13 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/toaster/message/5780 From: David Reyna There are several changes to the "ImagePkgList" content to work around: 1) The key field for the package size ('PKGSIZE') is currently an empty string 2) The list of files changed from 'FILES_INFO' to 'FILES' 3) The 'FILES' is now a dictionary in string form 4) Not all fields are always present for all packages, for example 'LICENSE' and 'SUMMARY' [YOCTO #14763] Signed-off-by: David Reyna Signed-off-by: David Reyna --- bitbake/lib/bb/ui/buildinfohelper.py | 71 ++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 19 deletions(-) diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index 8fef663469..5559387d8e 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py @@ -10,6 +10,7 @@ import sys import bb import re import os +import json import django from django.utils import timezone @@ -620,23 +621,39 @@ class ORMWrapper(object): packagedict[p]['object'].version = pkgpnmap[p]['PV'] packagedict[p]['object'].installed_name = p packagedict[p]['object'].revision = pkgpnmap[p]['PR'] - packagedict[p]['object'].license = pkgpnmap[p]['LICENSE'] - packagedict[p]['object'].section = pkgpnmap[p]['SECTION'] - packagedict[p]['object'].summary = pkgpnmap[p]['SUMMARY'] - packagedict[p]['object'].description = pkgpnmap[p]['DESCRIPTION'] - packagedict[p]['object'].size = int(pkgpnmap[p]['PKGSIZE']) + packagedict[p]['object'].license = pkgpnmap[p]['LICENSE'] if 'LICENSE' in pkgpnmap[p] else '' + packagedict[p]['object'].section = pkgpnmap[p]['SECTION'] if 'SECTION' in pkgpnmap[p] else '' + packagedict[p]['object'].summary = pkgpnmap[p]['SUMMARY'] if 'SUMMARY' in pkgpnmap[p] else '' + packagedict[p]['object'].description = pkgpnmap[p]['DESCRIPTION'] if 'DESCRIPTION' in pkgpnmap[p] else '' + + ### The name key for 'PKGSIZE' is currently a blank string + if not 'PKGSIZE' in pkgpnmap[p]: + if ('' in pkgpnmap[p]) and (pkgpnmap[p][''].isnumeric()): + packagedict[p]['object'].size = int(pkgpnmap[p]['']) + else: + packagedict[p]['object'].size = int(pkgpnmap[p]['PKGSIZE']) - # no files recorded for this package, so save files info + # no files recorded for this package, so save files info packagefile_objects = [] - for targetpath in pkgpnmap[p]['FILES_INFO']: - targetfilesize = pkgpnmap[p]['FILES_INFO'][targetpath] + + ### Event change workaround: name change plus string instead of dict + if 'FILES_INFO' in pkgpnmap[p]: + key = 'FILES_INFO' + else: + key = 'FILES' + pkg_dict = pkgpnmap[p][key] + if isinstance(pkg_dict, str): + pkg_dict = json.loads(pkgpnmap[p][key]) + + for targetpath in pkg_dict: + targetfilesize = pkg_dict[targetpath] packagefile_objects.append(Package_File( package = packagedict[p]['object'], path = targetpath, size = targetfilesize)) if packagefile_objects: Package_File.objects.bulk_create(packagefile_objects) except KeyError as e: - errormsg.append(" stpi: Key error, package %s key %s \n" % (p, e)) + errormsg.append(" stpi: Key error, package %s key %s map '%s'\n" % (p, e,pkgpnmap[p])) # save disk installed size packagedict[p]['object'].installed_size = packagedict[p]['size'] @@ -726,10 +743,13 @@ class ORMWrapper(object): return None # create and save the object - pname = package_info['PKG'] - built_recipe = recipes[package_info['PN']] if 'OPKGN' in package_info.keys(): pname = package_info['OPKGN'] + elif 'PKG' in package_info.keys(): + pname = package_info['PKG'] + else: + pname = package_info['PN'] + built_recipe = recipes[package_info['PN']] if built_package: bp_object, _ = Package.objects.get_or_create( build = build_obj, @@ -750,23 +770,36 @@ class ORMWrapper(object): "data package %s" % pname) return - bp_object.installed_name = package_info['PKG'] + bp_object.installed_name = pname # package_info['PKG'] bp_object.recipe = recipe bp_object.version = package_info['PKGV'] bp_object.revision = package_info['PKGR'] - bp_object.summary = package_info['SUMMARY'] - bp_object.description = package_info['DESCRIPTION'] - bp_object.size = int(package_info['PKGSIZE']) - bp_object.section = package_info['SECTION'] - bp_object.license = package_info['LICENSE'] + bp_object.summary = package_info['SUMMARY'] if 'SUMMARY' in package_info else '' + bp_object.description = package_info['DESCRIPTION'] if 'DESCRIPTION' in package_info else '' + bp_object.size = int(package_info['PKGSIZE']) if 'PKGSIZE' in package_info else '' + bp_object.section = package_info['SECTION'] if 'SECTION' in package_info else '' + bp_object.license = package_info['LICENSE'] if 'LICENSE' in package_info else '' + # Workround... + if (not 'PKGSIZE' in package_info) and ('' in package_info): + bp_object.size = int(package_info['']) bp_object.save() # save any attached file information packagefile_objects = [] - for path in package_info['FILES_INFO']: + + ### Event change workaround + if 'FILES_INFO' in package_info: + key = 'FILES_INFO' + else: + key = 'FILES' + pkg_dict = package_info[key] + if isinstance(pkg_dict, str): + pkg_dict = json.loads(package_info[key]) + + for path in pkg_dict: packagefile_objects.append(Package_File( package = bp_object, path = path, - size = package_info['FILES_INFO'][path] )) + size = pkg_dict[path] )) if packagefile_objects: Package_File.objects.bulk_create(packagefile_objects)