support/scripts: use show-info to extract dependency graph
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), switch 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 the 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@bootlin.com> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com> Cc: Adam Duskett <aduskett@gmail.com> Cc: Arnout Vandecappelle <arnout@mind.be> Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
parent
45cfcb5311
commit
d901aa32d5
@ -1,6 +1,7 @@
|
|||||||
# Copyright (C) 2010-2013 Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
# Copyright (C) 2010-2013 Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||||
# Copyright (C) 2019 Yann E. MORIN <yann.morin.1998@free.fr>
|
# Copyright (C) 2019 Yann E. MORIN <yann.morin.1998@free.fr>
|
||||||
|
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -19,7 +20,7 @@ from collections import defaultdict
|
|||||||
def get_dependency_tree():
|
def get_dependency_tree():
|
||||||
logging.info("Getting dependency tree...")
|
logging.info("Getting dependency tree...")
|
||||||
|
|
||||||
deps = defaultdict(list)
|
deps = {}
|
||||||
rdeps = defaultdict(list)
|
rdeps = defaultdict(list)
|
||||||
types = {}
|
types = {}
|
||||||
versions = {}
|
versions = {}
|
||||||
@ -29,23 +30,21 @@ def get_dependency_tree():
|
|||||||
types['all'] = 'target'
|
types['all'] = 'target'
|
||||||
versions['all'] = ''
|
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:
|
with open(os.devnull, 'wb') as devnull:
|
||||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=devnull,
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=devnull,
|
||||||
universal_newlines=True)
|
universal_newlines=True)
|
||||||
output = p.communicate()[0]
|
pkg_list = json.loads(p.communicate()[0])
|
||||||
|
|
||||||
for l in output.splitlines():
|
for pkg in pkg_list:
|
||||||
if " -> " in l:
|
deps['all'].append(pkg)
|
||||||
pkg = l.split(" -> ")[0]
|
types[pkg] = pkg_list[pkg]["type"]
|
||||||
deps[pkg] += l.split(" -> ")[1].split()
|
deps[pkg] = pkg_list[pkg].get("dependencies", [])
|
||||||
for p in l.split(" -> ")[1].split():
|
for p in deps[pkg]:
|
||||||
rdeps[p].append(pkg)
|
rdeps[p].append(pkg)
|
||||||
else:
|
versions[pkg] = \
|
||||||
pkg, type_version = l.split(": ", 1)
|
None if pkg_list[pkg]["type"] == "rootfs" \
|
||||||
t, v = "{} -".format(type_version).split(None, 2)[:2]
|
else "virtual" if pkg_list[pkg]["virtual"] \
|
||||||
deps['all'].append(pkg)
|
else pkg_list[pkg]["version"]
|
||||||
types[pkg] = t
|
|
||||||
versions[pkg] = v
|
|
||||||
|
|
||||||
return (deps, rdeps, types, versions)
|
return (deps, rdeps, types, versions)
|
||||||
|
Loading…
Reference in New Issue
Block a user