From 7022d5cccc947bbff59cf3f67e5fd630d6086671 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Thu, 30 May 2013 00:18:44 +0200 Subject: [PATCH] [matter] log and report packages not built due to missing USE flags --- matter/matter/builder.py | 30 ++++++++++++++++++++++++++++++ matter/matter/main.py | 17 +++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/matter/matter/builder.py b/matter/matter/builder.py index 63f48175b..1514433e1 100644 --- a/matter/matter/builder.py +++ b/matter/matter/builder.py @@ -81,6 +81,7 @@ class PackageBuilder(object): self._not_found_packages = [] self._not_installed_packages = [] self._not_merged_packages = [] + self._missing_use_packages = {} @classmethod def _build_standard_environment(cls, repository=None): @@ -159,6 +160,13 @@ class PackageBuilder(object): """ return self._not_merged_packages + def get_missing_use_packages(self): + """ + Return the list of packages that haven't been merged due to missing + USE flags. + """ + return self._missing_use_packages + def run(self): """ Execute Package building action. @@ -686,6 +694,28 @@ class PackageBuilder(object): # print issues to stdout and give up print_warning("dependencies calculation failed, aborting") graph.display_problems() + + # try to collect some info about the failure + bt_config = (graph.get_backtrack_infos() or {}).get("config", {}) + supported_info = ["needed_use_config_changes"] + for k, v in bt_config.items(): + if k not in supported_info: + print_warning("unsupported backtrack info: %s -> %s" % ( + k, v,)) + continue + if k == "needed_use_config_changes": + for tup in v: + try: + pkg, (new_use, new_changes) = tup + except (ValueError, TypeError): + print_error( + "unsupported needed_use_config_changes: %s" % ( + tup,)) + continue + obj = self._missing_use_packages.setdefault(pkg.cpv, {}) + obj["pkg"] = pkg + obj["changes"] = new_changes + return 0 print_info("dependency graph generated successfully") diff --git a/matter/matter/main.py b/matter/matter/main.py index c0b3cff86..242ee15b8 100644 --- a/matter/matter/main.py +++ b/matter/matter/main.py @@ -85,6 +85,7 @@ def matter_main(binary_pms, nsargs, cwd, specs): not_installed = [] not_merged = [] uninstalled = [] + missing_use = {} tainted_repositories = set() spec_count = 0 tot_spec = len(specs) @@ -113,6 +114,8 @@ def matter_main(binary_pms, nsargs, cwd, specs): builder.get_not_merged_packages()) uninstalled.extend( builder.get_uninstalled_packages()) + missing_use.update( + builder.get_missing_use_packages()) preserved_libs = binary_pms.check_preserved_libraries( emerge_config) @@ -188,6 +191,20 @@ def matter_main(binary_pms, nsargs, cwd, specs): "\n ".join(sorted(not_installed)),)) print_info("Packages uninstalled:\n %s" % ( "\n ".join(sorted(uninstalled)),)) + + if missing_use: + print_info("Packages not built due to missing USE flags:") + for atom in sorted(missing_use.keys()): + use_data = missing_use[atom] + use_l = [] + for use in sorted(use_data["changes"]): + if use_data["changes"][use]: + use_l.append(use) + else: + use_l.append("-" + use) + print_info("%s %s" % ( + use_data["pkg"].slot_atom, " ".join(use_l))) + print_info("Preserved libs: %s" % ( preserved_libs,)) print_info("")