[OE-core] [PATCH v6] image-buildinfo.bbclass: New class, writes
Paul Eggleton
paul.eggleton at linux.intel.com
Thu Nov 6 11:12:39 UTC 2014
Hi Alejandro,
On Wednesday 05 November 2014 13:21:58 Alejandro Hernandez wrote:
> build information to target filesystem on /etc/build
>
> such as enabled layers, their current status and commit
>
> squashspaces was moved to oe/utils.py to make it available
>
> to different classes and avoid code duplication.
>
> [YOCTO #6770]
>
> Signed-off-by: Alejandro Hernandez <alejandro.hernandez at linux.intel.com>
> ---
> meta/classes/buildhistory.bbclass | 25 ++++++-------
> meta/classes/image-buildinfo.bbclass | 69
> ++++++++++++++++++++++++++++++++++++ meta/lib/oe/utils.py |
> 4 +++
> 3 files changed, 83 insertions(+), 15 deletions(-)
> create mode 100644 meta/classes/image-buildinfo.bbclass
>
> diff --git a/meta/classes/buildhistory.bbclass
> b/meta/classes/buildhistory.bbclass index 8b5d5c2..2b5f84a 100644
> --- a/meta/classes/buildhistory.bbclass
> +++ b/meta/classes/buildhistory.bbclass
> @@ -155,7 +155,7 @@ python buildhistory_emit_pkghistory() {
> with open(os.path.join(pkgdata_dir, pn)) as f:
> for line in f.readlines():
> if line.startswith('PACKAGES: '):
> - packages = squashspaces(line.split(': ', 1)[1])
> + packages = oe.utils.squashspaces(line.split(': ',
> 1)[1]) break
> except IOError as e:
> if e.errno == errno.ENOENT:
> @@ -181,7 +181,7 @@ python buildhistory_emit_pkghistory() {
> rcpinfo.pe = pe
> rcpinfo.pv = pv
> rcpinfo.pr = pr
> - rcpinfo.depends = sortlist(squashspaces(d.getVar('DEPENDS', True) or
> "")) + rcpinfo.depends =
> sortlist(oe.utils.squashspaces(d.getVar('DEPENDS', True) or ""))
> rcpinfo.packages = packages
> write_recipehistory(rcpinfo, d)
>
> @@ -222,13 +222,13 @@ python buildhistory_emit_pkghistory() {
> pkginfo.pkge = pkge
> pkginfo.pkgv = pkgv
> pkginfo.pkgr = pkgr
> - pkginfo.rprovides =
> sortpkglist(squashspaces(pkgdata.get('RPROVIDES', ""))) -
> pkginfo.rdepends = sortpkglist(squashspaces(pkgdata.get('RDEPENDS', ""))) -
> pkginfo.rrecommends =
> sortpkglist(squashspaces(pkgdata.get('RRECOMMENDS', ""))) -
> pkginfo.rsuggests = sortpkglist(squashspaces(pkgdata.get('RSUGGESTS', "")))
> - pkginfo.rreplaces =
> sortpkglist(squashspaces(pkgdata.get('RREPLACES', ""))) -
> pkginfo.rconflicts = sortpkglist(squashspaces(pkgdata.get('RCONFLICTS',
> ""))) - pkginfo.files = squashspaces(pkgdata.get('FILES', ""))
> + pkginfo.rprovides =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RPROVIDES', ""))) +
> pkginfo.rdepends =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RDEPENDS', ""))) +
> pkginfo.rrecommends =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RRECOMMENDS', ""))) +
> pkginfo.rsuggests =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RSUGGESTS', ""))) +
> pkginfo.rreplaces =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RREPLACES', ""))) +
> pkginfo.rconflicts =
> sortpkglist(oe.utils.squashspaces(pkgdata.get('RCONFLICTS', ""))) +
> pkginfo.files = oe.utils.squashspaces(pkgdata.get('FILES', "")) for filevar
> in pkginfo.filevars:
> pkginfo.filevars[filevar] = pkgdata.get(filevar, "")
>
> @@ -525,11 +525,6 @@ def buildhistory_get_metadata_revs(d):
> for i in layers]
> return '\n'.join(medadata_revs)
>
> -
> -def squashspaces(string):
> - import re
> - return re.sub("\s+", " ", string).strip()
> -
> def outputvars(vars, listvars, d):
> vars = vars.split()
> listvars = listvars.split()
> @@ -538,7 +533,7 @@ def outputvars(vars, listvars, d):
> value = d.getVar(var, True) or ""
> if var in listvars:
> # Squash out spaces
> - value = squashspaces(value)
> + value = oe.utils.squashspaces(value)
> ret += "%s = %s\n" % (var, value)
> return ret.rstrip('\n')
>
> diff --git a/meta/classes/image-buildinfo.bbclass
> b/meta/classes/image-buildinfo.bbclass new file mode 100644
> index 0000000..aa17cc8
> --- /dev/null
> +++ b/meta/classes/image-buildinfo.bbclass
> @@ -0,0 +1,69 @@
> +#
> +# Writes build information to target filesystem on /etc/build
> +#
> +# Copyright (C) 2014 Intel Corporation
> +# Author: Alejandro Enedino Hernandez Samaniego
> <alejandro.hernandez at intel.com> +#
> +# Licensed under the MIT license, see COPYING.MIT for details
> +#
> +# Usage: add INHERIT += "image-buildinfo" to your conf file
> +#
> +
> +# Desired variables to display
> +IMAGE_BUILDINFO_VARS ?= "DISTRO DISTRO_VERSION"
> +
> +# From buildhistory.bbclass
> +def image_buildinfo_outputvars(vars, listvars, d):
> + vars = vars.split()
> + listvars = listvars.split()
> + ret = ""
> + for var in vars:
> + value = d.getVar(var, True) or ""
> + if (d.getVarFlag(var, 'type') == "list"):
> + value = oe.utils.squashspaces(value)
> + ret += "%s = %s\n" % (var, value)
> + return ret.rstrip('\n')
> +
> +# Gets git branch's status (clean or dirty)
> +def get_layer_git_status(path):
> + f = os.popen("cd %s; git diff --stat 2>&1 | tail -n 1" % path)
> + data = f.read()
> + if f.close() is None:
> + if len(data) != 0:
> + return "-- modified"
> + return ""
> +
> +# Returns layer revisions along with their respective status
> +def get_layer_revs(d):
> + layers = (d.getVar("BBLAYERS", True) or "").split()
> + medadata_revs = ["%-17s = %s:%s %s" % (os.path.basename(i), \
> + base_get_metadata_git_branch(i, None).strip(), \
> + base_get_metadata_git_revision(i, None), \
> + get_layer_git_status(i)) \
> + for i in layers]
> + return '\n'.join(medadata_revs)
> +
> +def buildinfo_target(d):
> + # Get context
> + if d.getVar('BB_WORKERCONTEXT', True) != '1':
> + return ""
> + # Single and list variables to be read
> + vars = (d.getVar("IMAGE_BUILDINFO_VARS", True) or "")
> + listvars = (d.getVar("IMAGE_BUILDINFO_LVARS", True) or "")
> + return image_buildinfo_outputvars(vars, listvars, d)
> +
> +# Write build information to target filesystem
> +buildinfo () {
> +cat > ${IMAGE_ROOTFS}${sysconfdir}/build << END
> +-----------------------
> +Build Configuration: |
> +-----------------------
> +${@buildinfo_target(d)}
> +-----------------------
> +Layer Revisions: |
> +-----------------------
> +${@get_layer_revs(d)}
> +END
> +}
> +
> +IMAGE_PREPROCESS_COMMAND += "buildinfo;"
> diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py
> index 3544256..1f84ba4 100644
> --- a/meta/lib/oe/utils.py
> +++ b/meta/lib/oe/utils.py
> @@ -180,3 +180,7 @@ def multiprocess_exec(commands, function):
> pool.terminate()
> pool.join()
> raise
> +
> +def squashspaces(string):
> + import re
> + return re.sub("\s+", " ", string).strip()
This looks good to me now, thanks!
Acked-by: Paul Eggleton <paul.eggleton at linux.intel.com>
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
More information about the Openembedded-core
mailing list