[Toaster] [PATCH] toaster.bbclass: improve package information collection

Smith, Elliot elliot.smith at intel.com
Tue Apr 12 07:42:14 PDT 2016


Looks good to me. Tested, and the package counts match for the cases I
tried.

Added to toaster-next and sent to OpenEmbedded mailing list (
openembedded-core at lists.openembedded.org).

Thanks.
Elliot

On 12 April 2016 at 09:56, Joshua Lock <joshua.g.lock at intel.com> wrote:

> The PACKAGES variable doesn't include all packages potentially
> generated by a recipe, not least of all because it doesn't include
> dynamic packages created via do_split_packages() or similar.
>
> Instead of trying to guess which packages were generated, walk
> ${PKGDESTWORK}/runtime to find all package information that was
> written to disk. This allows us to read all information for the
> complete list of packages generated by the recipe.
>
> For example before this patch we get SinglePackageInfo events for
> 9 packages from ncurses. With the patch applied we get 20 events
> for all of the packages created during an ncurses build.
>
> As a bonus we also switch to using the same postfuncs for both
> do_packagedata and do_packagedata_setscene as they each result
> in a PKGDESTWORK with the relevant directories and files
> created.
>
> [YOCTO #9115]
>
> Signed-off-by: Joshua Lock <joshua.g.lock at intel.com>
> ---
>  meta/classes/toaster.bbclass | 50
> +++++++++++++-------------------------------
>  1 file changed, 15 insertions(+), 35 deletions(-)
>
> diff --git a/meta/classes/toaster.bbclass b/meta/classes/toaster.bbclass
> index 004e068..1a70f14 100644
> --- a/meta/classes/toaster.bbclass
> +++ b/meta/classes/toaster.bbclass
> @@ -112,45 +112,25 @@ def _toaster_load_pkgdatafile(dirpath, filepath):
>                  pass    # ignore lines without valid key: value pairs
>      return pkgdata
>
> -python toaster_package_dumpdata_setscene() {
> -    """
> -    Dumps the data created by package_setscene
> -    """
> -    # replicate variables from the package.bbclass
> -    packages = d.getVar('PACKAGES', True)
> -    pkgdatadir = d.getVar('PKGDATA_DIR', True)
> -    # scan and send data for each package
> -    lpkgdata = {}
> -    for pkg in packages.split():
> -        try:
> -          lpkgdata = _toaster_load_pkgdatafile(pkgdatadir + "/runtime/",
> pkg)
> -        except:
> -          # these are typically foo-locale which actually point into
> foo-locale-<language> in runtime-rprovides
> -          bb.note("toaster_package_dumpdata_setscene: failed to load pkg
> information for: %s:%s"%(pkg,sys.exc_info()[0]))
> -        # Fire an event containing the pkg data
> -        bb.event.fire(bb.event.MetadataEvent("SinglePackageInfo",
> lpkgdata), d)
> -
> -}
> -
> -
>  python toaster_package_dumpdata() {
>      """
> -    Dumps the data created by emit_pkgdata
> +    Dumps the data about the packages created by a recipe
>      """
> -    # replicate variables from the package.bbclass
> -
> -    packages = d.getVar('PACKAGES', True)
> -    pkgdatadir = d.getVar('PKGDESTWORK', True)
>
> -    # scan and send data for each package
> +    # No need to try and dumpdata if the recipe isn't generating packages
> +    if not d.getVar('PACKAGES', True):
> +        return
>
> +    pkgdatadir = d.getVar('PKGDESTWORK', True)
>      lpkgdata = {}
> -    for pkg in packages.split():
> -
> -        lpkgdata = _toaster_load_pkgdatafile(pkgdatadir + "/runtime/",
> pkg)
> -
> -        # Fire an event containing the pkg data
> -        bb.event.fire(bb.event.MetadataEvent("SinglePackageInfo",
> lpkgdata), d)
> +    datadir = os.path.join(pkgdatadir, 'runtime')
> +
> +    # scan and send data for each generated package
> +    for datafile in os.listdir(datadir):
> +        if not datafile.endswith('.packaged'):
> +            lpkgdata = _toaster_load_pkgdatafile(datadir, datafile)
> +            # Fire an event containing the pkg data
> +            bb.event.fire(bb.event.MetadataEvent("SinglePackageInfo",
> lpkgdata), d)
>  }
>
>  # 2. Dump output image files information
> @@ -401,8 +381,8 @@ toaster_collect_task_stats[eventmask] =
> "bb.event.BuildCompleted bb.build.TaskSu
>  addhandler toaster_buildhistory_dump
>  toaster_buildhistory_dump[eventmask] = "bb.event.BuildCompleted"
>
> -do_packagedata_setscene[postfuncs] += "toaster_package_dumpdata_setscene "
> -do_packagedata_setscene[vardepsexclude] +=
> "toaster_package_dumpdata_setscene "
> +do_packagedata_setscene[postfuncs] += "toaster_package_dumpdata "
> +do_packagedata_setscene[vardepsexclude] += "toaster_package_dumpdata "
>
>  do_package[postfuncs] += "toaster_package_dumpdata "
>  do_package[vardepsexclude] += "toaster_package_dumpdata "
> --
> 2.5.5
>
> --
> _______________________________________________
> toaster mailing list
> toaster at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/toaster
>



-- 
Elliot Smith
Software Engineer
Intel Open Source Technology Centre
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20160412/b9ea82b3/attachment-0001.html>


More information about the toaster mailing list