Re: [OE-core] [poky][dunfell][PATCH] buildhistory.bbclass: Enable exporting more recipe and package data

2021-07-19 Thread Steve Sakoman
There is a "master first" policy for dunfell, so this series would
need to be accepted into the master branch before it can be considered
for dunfell.

Also, this is a new feature, so that also is an issue for including
this in dunfell, where changes are typically only CVE and bug fixes.

Steve

On Mon, Jul 19, 2021 at 1:20 AM sana kazi  wrote:
>
> From: Sana Kazi 
>
> Used BUILDHISTORY_EXPORT_RECIPE_VARIABLES and
> BUILDHISTORY_EXPORT_PACKAGE_VARIABLES to export recipe and package
> data to the latest file of buildhistory and sorted it alphabetically.
>
> This makes extending data in buildhistory git tree simple and avoids
> patches to it for users who care about things like SRC_URI and like
> to track it in buildhistory git tree.
>
> Now we can add additional information as per our requirement to the
> buildhistory like LICENSE, SRC_URI AND MAINTAINER to the buildhistory
> by appending them in a recipe or distro specific conf file as follows:
>
> BUILDHISTORY_EXPORT_RECIPE_VARIABLES += "LICENSE MAINTAINER SRC_URI"
> BUILDHISTORY_EXPORT_PACKAGE_VARIABLES += "LICENSE MAINTAINER"
>
> Signed-off-by: Sana Kazi 
> ---
>  meta-poky/conf/distro/poky.conf   |  2 +
>  meta/classes/buildhistory.bbclass | 98 +--
>  2 files changed, 68 insertions(+), 32 deletions(-)
>
> diff --git a/meta-poky/conf/distro/poky.conf b/meta-poky/conf/distro/poky.conf
> index 92e9ba5477..d766d4b1f5 100644
> --- a/meta-poky/conf/distro/poky.conf
> +++ b/meta-poky/conf/distro/poky.conf
> @@ -89,3 +89,5 @@ INHERIT += "reproducible_build"
>
>  BB_SIGNATURE_HANDLER ?= "OEEquivHash"
>  BB_HASHSERVE ??= "auto"
> +BUILDHISTORY_EXPORT_RECIPE_VARIABLES ?= "PR PV PE LAYER DEPENDS PACKAGES"
> +BUILDHISTORY_EXPORT_PACKAGE_VARIABLES ?= "PE PV PR PKG PKGE PKGV PKGR 
> RPROVIDES RDEPENDS RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS PKGSIZE FILES 
> FILELIST"
> diff --git a/meta/classes/buildhistory.bbclass 
> b/meta/classes/buildhistory.bbclass
> index 44a66df962..a2888666d9 100644
> --- a/meta/classes/buildhistory.bbclass
> +++ b/meta/classes/buildhistory.bbclass
> @@ -254,6 +254,8 @@ python buildhistory_emit_pkghistory() {
>  rcpinfo.depends = sortlist(oe.utils.squashspaces(d.getVar('DEPENDS') or 
> ""))
>  rcpinfo.packages = packages
>  rcpinfo.layer = layer
> +export_recipe_variables = 
> d.getVar('BUILDHISTORY_EXPORT_RECIPE_VARIABLES') or ''
> +rcpinfo.export_recipe_variables = export_recipe_variables
>  write_recipehistory(rcpinfo, d)
>
>  pkgdest = d.getVar('PKGDEST')
> @@ -312,6 +314,9 @@ python buildhistory_emit_pkghistory() {
>
>  pkginfo.size = int(pkgdata['PKGSIZE'])
>
> +export_package_variables = 
> d.getVar('BUILDHISTORY_EXPORT_PACKAGE_VARIABLES') or ''
> +pkginfo.export_package_variables = export_package_variables
> +
>  write_pkghistory(pkginfo, d)
>
>  # Create files-in-.txt files containing a list of files of 
> each recipe's package
> @@ -360,14 +365,20 @@ def write_recipehistory(rcpinfo, d):
>  pkghistdir = d.getVar('BUILDHISTORY_DIR_PACKAGE')
>
>  infofile = os.path.join(pkghistdir, "latest")
> +export_recipe_variables = set(rcpinfo.export_recipe_variables.split())
> +ret = []
>  with open(infofile, "w") as f:
> -if rcpinfo.pe != "0":
> -f.write(u"PE = %s\n" %  rcpinfo.pe)
> -f.write(u"PV = %s\n" %  rcpinfo.pv)
> -f.write(u"PR = %s\n" %  rcpinfo.pr)
> -f.write(u"DEPENDS = %s\n" %  rcpinfo.depends)
> -f.write(u"PACKAGES = %s\n" %  rcpinfo.packages)
> -f.write(u"LAYER = %s\n" %  rcpinfo.layer)
> +for var in export_recipe_variables:
> +if var == "PE":
> +if rcpinfo.pe != "0":
> +ret.append("%s = %s" % (var, rcpinfo.pe))
> +elif var == "LAYER":
> +ret.append("%s = %s" % (var, rcpinfo.layer))
> +else:
> +ret.append("%s = %s" % (var," 
> ".join((str(d.getVar(var)).split()
> +ret.sort()
> +for element in ret:
> +f.write(element + "\n")
>
>  write_latest_srcrev(d, pkghistdir)
>
> @@ -381,32 +392,55 @@ def write_pkghistory(pkginfo, d):
>  bb.utils.mkdirhier(pkgpath)
>
>  infofile = os.path.join(pkgpath, "latest")
> +export_package_variables = set(pkginfo.export_package_variables.split())
> +ret = []
>  with open(infofile, "w") as f:
> -if pkginfo.pe != "0":
> -f.write(u"PE = %s\n" %  pkginfo.pe)
> -f.write(u"PV = %s\n" %  pkginfo.pv)
> -f.write(u"PR = %s\n" %  pkginfo.pr)
> -
> -if pkginfo.pkg != pkginfo.name:
> -f.write(u"PKG = %s\n" % pkginfo.pkg)
> -if pkginfo.pkge != pkginfo.pe:
> -f.write(u"PKGE = %s\n" % pkginfo.pkge)
> -if pkginfo.pkgv != pkginfo.pv:
> -f.write(u"PKGV = %s\n" % pkginfo.pkgv)
> -if pkginfo.pkgr != pkginfo.pr:
> -f.write(u"PKGR = %s\n" % pkginfo.pkgr)
> -f.write

[OE-core] [poky][dunfell][PATCH] buildhistory.bbclass: Enable exporting more recipe and package data

2021-07-19 Thread sana kazi
From: Sana Kazi 

Used BUILDHISTORY_EXPORT_RECIPE_VARIABLES and
BUILDHISTORY_EXPORT_PACKAGE_VARIABLES to export recipe and package
data to the latest file of buildhistory and sorted it alphabetically.

This makes extending data in buildhistory git tree simple and avoids
patches to it for users who care about things like SRC_URI and like
to track it in buildhistory git tree.

Now we can add additional information as per our requirement to the
buildhistory like LICENSE, SRC_URI AND MAINTAINER to the buildhistory
by appending them in a recipe or distro specific conf file as follows:

BUILDHISTORY_EXPORT_RECIPE_VARIABLES += "LICENSE MAINTAINER SRC_URI"
BUILDHISTORY_EXPORT_PACKAGE_VARIABLES += "LICENSE MAINTAINER"

Signed-off-by: Sana Kazi 
---
 meta-poky/conf/distro/poky.conf   |  2 +
 meta/classes/buildhistory.bbclass | 98 +--
 2 files changed, 68 insertions(+), 32 deletions(-)

diff --git a/meta-poky/conf/distro/poky.conf b/meta-poky/conf/distro/poky.conf
index 92e9ba5477..d766d4b1f5 100644
--- a/meta-poky/conf/distro/poky.conf
+++ b/meta-poky/conf/distro/poky.conf
@@ -89,3 +89,5 @@ INHERIT += "reproducible_build"
 
 BB_SIGNATURE_HANDLER ?= "OEEquivHash"
 BB_HASHSERVE ??= "auto"
+BUILDHISTORY_EXPORT_RECIPE_VARIABLES ?= "PR PV PE LAYER DEPENDS PACKAGES"
+BUILDHISTORY_EXPORT_PACKAGE_VARIABLES ?= "PE PV PR PKG PKGE PKGV PKGR 
RPROVIDES RDEPENDS RRECOMMENDS RSUGGESTS RREPLACES RCONFLICTS PKGSIZE FILES 
FILELIST"
diff --git a/meta/classes/buildhistory.bbclass 
b/meta/classes/buildhistory.bbclass
index 44a66df962..a2888666d9 100644
--- a/meta/classes/buildhistory.bbclass
+++ b/meta/classes/buildhistory.bbclass
@@ -254,6 +254,8 @@ python buildhistory_emit_pkghistory() {
 rcpinfo.depends = sortlist(oe.utils.squashspaces(d.getVar('DEPENDS') or 
""))
 rcpinfo.packages = packages
 rcpinfo.layer = layer
+export_recipe_variables = d.getVar('BUILDHISTORY_EXPORT_RECIPE_VARIABLES') 
or ''
+rcpinfo.export_recipe_variables = export_recipe_variables
 write_recipehistory(rcpinfo, d)
 
 pkgdest = d.getVar('PKGDEST')
@@ -312,6 +314,9 @@ python buildhistory_emit_pkghistory() {
 
 pkginfo.size = int(pkgdata['PKGSIZE'])
 
+export_package_variables = 
d.getVar('BUILDHISTORY_EXPORT_PACKAGE_VARIABLES') or ''
+pkginfo.export_package_variables = export_package_variables
+
 write_pkghistory(pkginfo, d)
 
 # Create files-in-.txt files containing a list of files of 
each recipe's package
@@ -360,14 +365,20 @@ def write_recipehistory(rcpinfo, d):
 pkghistdir = d.getVar('BUILDHISTORY_DIR_PACKAGE')
 
 infofile = os.path.join(pkghistdir, "latest")
+export_recipe_variables = set(rcpinfo.export_recipe_variables.split())
+ret = []
 with open(infofile, "w") as f:
-if rcpinfo.pe != "0":
-f.write(u"PE = %s\n" %  rcpinfo.pe)
-f.write(u"PV = %s\n" %  rcpinfo.pv)
-f.write(u"PR = %s\n" %  rcpinfo.pr)
-f.write(u"DEPENDS = %s\n" %  rcpinfo.depends)
-f.write(u"PACKAGES = %s\n" %  rcpinfo.packages)
-f.write(u"LAYER = %s\n" %  rcpinfo.layer)
+for var in export_recipe_variables:
+if var == "PE":
+if rcpinfo.pe != "0":
+ret.append("%s = %s" % (var, rcpinfo.pe))
+elif var == "LAYER":
+ret.append("%s = %s" % (var, rcpinfo.layer))
+else:
+ret.append("%s = %s" % (var," 
".join((str(d.getVar(var)).split()
+ret.sort()
+for element in ret:
+f.write(element + "\n")
 
 write_latest_srcrev(d, pkghistdir)
 
@@ -381,32 +392,55 @@ def write_pkghistory(pkginfo, d):
 bb.utils.mkdirhier(pkgpath)
 
 infofile = os.path.join(pkgpath, "latest")
+export_package_variables = set(pkginfo.export_package_variables.split())
+ret = []
 with open(infofile, "w") as f:
-if pkginfo.pe != "0":
-f.write(u"PE = %s\n" %  pkginfo.pe)
-f.write(u"PV = %s\n" %  pkginfo.pv)
-f.write(u"PR = %s\n" %  pkginfo.pr)
-
-if pkginfo.pkg != pkginfo.name:
-f.write(u"PKG = %s\n" % pkginfo.pkg)
-if pkginfo.pkge != pkginfo.pe:
-f.write(u"PKGE = %s\n" % pkginfo.pkge)
-if pkginfo.pkgv != pkginfo.pv:
-f.write(u"PKGV = %s\n" % pkginfo.pkgv)
-if pkginfo.pkgr != pkginfo.pr:
-f.write(u"PKGR = %s\n" % pkginfo.pkgr)
-f.write(u"RPROVIDES = %s\n" %  pkginfo.rprovides)
-f.write(u"RDEPENDS = %s\n" %  pkginfo.rdepends)
-f.write(u"RRECOMMENDS = %s\n" %  pkginfo.rrecommends)
-if pkginfo.rsuggests:
-f.write(u"RSUGGESTS = %s\n" %  pkginfo.rsuggests)
-if pkginfo.rreplaces:
-f.write(u"RREPLACES = %s\n" %  pkginfo.rreplaces)
-if pkginfo.rconflicts:
-f.write(u"RCONFLICTS = %s\n" %  pkginfo.rconflicts)
-f.write(u"PKGSIZE = %d\n" %  pkginfo.size)
-f.write(u"FILES = %s\n" %  pkginfo.files)