[Buildroot] [PATCH v3 08/12] support/scripts/pkg-stats: add defconfig support

Titouan Christophe titouan.christophe at railnova.eu
Sun Feb 23 14:37:45 UTC 2020


Heiko, all,

Nice to add the defconfigs to the stats !

On 2/22/20 9:57 AM, Heiko Thiery wrote:
> Scan configs directory and create Defconfig objects.
> 
> Signed-off-by: Heiko Thiery <heiko.thiery at gmail.com>
> ---
>   support/scripts/pkg-stats | 42 +++++++++++++++++++++++++++++++++++++--
>   1 file changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/support/scripts/pkg-stats b/support/scripts/pkg-stats
> index 36b33586ef..ae70f90485 100755
> --- a/support/scripts/pkg-stats
> +++ b/support/scripts/pkg-stats
> @@ -54,6 +54,33 @@ RM_API_STATUS_NOT_FOUND = 4
>   # because it's used by sub-processes.
>   http_pool = None
>   
> +class Defconfig:
> +    def __init__(self, name, path):
> +        self.name = name
> +        self.path = path
> +        self.developers = None
> +
> +    def set_developers(self, developers):
> +        """
> +        Fills in the .developers field
> +        """
> +        self.developers = list()
> +        for dev in developers:
> +            if dev.hasfile(self.path):
> +                self.developers.append(dev.name)

self.developers = [
     dev.name
     for dev in developers
     if dev.hasfile(self.path)
]

> +
> +def get_defconfig_list():
> +     """
> +     Builds the list of Buildroot defconfigs, returning a list of Defconfig
> +     objects.
> +     """
> +     defconfigs = list()
> +     files = [f for f in os.listdir('configs')]
> +     for name in files:
> +         d = Defconfig(name[:-10], os.path.join('configs', name))
> +         defconfigs.append(d)
> +     return defconfigs

return [
     Defconfig(name[:-10], os.path.join('configs', name))
     for name in os.listdir('configs')
]

> +
>   
>   class Package:
>       all_licenses = dict()
> @@ -882,7 +909,7 @@ def dump_html(packages, stats, date, commit, output):
>           f.write(html_footer)
>   
>   
> -def dump_json(packages, stats, date, commit, output):
> +def dump_json(packages, defconfigs, stats, date, commit, output):
>       # Format packages as a dictionnary instead of a list
>       # Exclude local field that does not contains real date
>       excluded_fields = ['url_worker', 'name']
> @@ -893,6 +920,12 @@ def dump_json(packages, stats, date, commit, output):
>               if k not in excluded_fields
>           } for pkg in packages
>       }
> +    defconfigs = {
> +        d.name: {
> +            k: v
> +            for k, v in d.__dict__.items()
> +        } for d in defconfigs
> +    }
>       # Aggregate infrastructures into a single dict entry
>       statistics = {
>           k: v
> @@ -903,6 +936,7 @@ def dump_json(packages, stats, date, commit, output):
>       # The actual structure to dump, add commit and date to it
>       final = {'packages': pkgs,
>                'stats': statistics,
> +             'defconfigs': defconfigs,
>                'commit': commit,
>                'date': str(date)}
>   
> @@ -944,6 +978,10 @@ def __main__():
>       packages = get_pkglist(args.npackages, package_list)
>       print("Getting developers ...")
>       developers = parse_developers()
> +    print("Build defconfig list ...")
> +    defconfigs = get_defconfig_list()
> +    for d in defconfigs:
> +        d.set_developers(developers)
>       print("Getting package make info ...")
>       package_init_make_info()
>       print("Getting package details ...")
> @@ -970,7 +1008,7 @@ def __main__():
>           dump_html(packages, stats, date, commit, args.html)
>       if args.json:
>           print("Write JSON")
> -        dump_json(packages, stats, date, commit, args.json)
> +        dump_json(packages, defconfigs, stats, date, commit, args.json)
>   
>   
>   __main__()
> 



More information about the buildroot mailing list