[Buildroot] [PATCH 11/12 v3] support/scripts: use show-info to extract dependency graph

Yann E. MORIN yann.morin.1998 at free.fr
Mon Apr 15 20:08:32 UTC 2019


Arnout, All,

On 2019-04-15 21:47 +0200, Yann E. MORIN spake thusly:
> Currently, we extract the dependency graph from the aptly named but
> ad-hoc show-dependency-graph rule.
> 
> We now have a better solution to report package information, with
> show-info.
> 
> Since show-dependency-graph never went into a release so far, and
> show-info does provide the same (and more), swith to using show-info.
> 
> Thanks to Adam for suggesting the coding style to have a readable code
> that is not ugly but still pleases flake8. Thanks to Arnout for
> suggesting the use of dict.get() to further simplify the code.
> 
> Note: we do not use th reverse_dependencies field because it only
> contains those packages that have a kconfig option, so we'd miss most
> host packages.
> 
> Reported-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Cc: Thomas De Schampheleire <patrickdepinguin at gmail.com>
> Cc: Adam Duskett <aduskett at gmail.com>
> Cc: Arnout Vandecappelle <arnout at mind.be>
> Cc: Ricardo Martincoski <ricardo.martincoski at gmail.com>
> ---
>  support/scripts/brpkgutil.py | 30 ++++++++++++++----------------
>  1 file changed, 14 insertions(+), 16 deletions(-)
> 
> diff --git a/support/scripts/brpkgutil.py b/support/scripts/brpkgutil.py
> index f65068d348..780cdef49c 100644
> --- a/support/scripts/brpkgutil.py
> +++ b/support/scripts/brpkgutil.py
> @@ -1,12 +1,12 @@
>  # Copyright (C) 2010-2013 Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
>  # Copyright (C) 2019 Yann E. MORIN <yann.morin.1998 at free.fr>
>  
> +import json
>  import logging
>  import os
>  import subprocess
>  from collections import defaultdict
>  
> -

Spurious line removal... Can you fix when applying, or should I respin?

Regards,
Yann E. MORIN.

>  # This function returns a tuple of four dictionaries, all using package
>  # names as keys:
>  # - a dictionary which values are the lists of packages that are the
> @@ -19,7 +19,7 @@ from collections import defaultdict
>  def get_dependency_tree():
>      logging.info("Getting dependency tree...")
>  
> -    deps = defaultdict(list)
> +    deps = {}
>      rdeps = defaultdict(list)
>      types = {}
>      versions = {}
> @@ -29,23 +29,21 @@ def get_dependency_tree():
>      types['all'] = 'target'
>      versions['all'] = ''
>  
> -    cmd = ["make", "-s", "--no-print-directory", "show-dependency-tree"]
> +    cmd = ["make", "-s", "--no-print-directory", "show-info"]
>      with open(os.devnull, 'wb') as devnull:
>          p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=devnull,
>                               universal_newlines=True)
> -        output = p.communicate()[0]
> +        pkg_list = json.loads(p.communicate()[0])
>  
> -    for l in output.splitlines():
> -        if " -> " in l:
> -            pkg = l.split(" -> ")[0]
> -            deps[pkg] += l.split(" -> ")[1].split()
> -            for p in l.split(" -> ")[1].split():
> -                rdeps[p].append(pkg)
> -        else:
> -            pkg, type_version = l.split(": ", 1)
> -            t, v = "{} -".format(type_version).split(None, 2)[:2]
> -            deps['all'].append(pkg)
> -            types[pkg] = t
> -            versions[pkg] = v
> +    for pkg in pkg_list:
> +        deps['all'].append(pkg)
> +        types[pkg] = pkg_list[pkg]["type"]
> +        deps[pkg] = pkg_list[pkg].get("dependencies", [])
> +        for p in deps[pkg]:
> +            rdeps[p].append(pkg)
> +        versions[pkg] = \
> +            None if pkg_list[pkg]["type"] == "rootfs" \
> +            else "virtual" if pkg_list[pkg]["virtual"] \
> +            else pkg_list[pkg]["version"]
>  
>      return (deps, rdeps, types, versions)
> -- 
> 2.14.1
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the buildroot mailing list