diff options
-rw-r--r-- | pym/_emerge/actions.py | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py index 1c6829816..47db1346e 100644 --- a/pym/_emerge/actions.py +++ b/pym/_emerge/actions.py @@ -1422,13 +1422,26 @@ def action_info(settings, trees, myopts, myfiles): portdb = trees["/"]["porttree"].dbapi main_repo = portdb.getRepositoryName(portdb.porttree_root) + cp_map = {} + cp_max_len = 0 for orig_atom, x in myvars: pkg_matches = vardb.match(x) versions = [] for cpv in pkg_matches: + matched_cp = portage.versions.cpv_getkey(cpv) ver = portage.versions.cpv_getversion(cpv) + ver_map = cp_map.setdefault(matched_cp, {}) + prev_match = ver_map.get(ver) + if prev_match is not None: + if prev_match.provide_suffix: + # prefer duplicate matches that include + # additional virtual provider info + continue + + if len(matched_cp) > cp_max_len: + cp_max_len = len(matched_cp) repo = vardb.aux_get(cpv, ["repository"])[0] if repo == main_repo: repo_suffix = "" @@ -1436,22 +1449,20 @@ def action_info(settings, trees, myopts, myfiles): repo_suffix = "::<unknown repository>" else: repo_suffix = "::" + repo - - matched_cp = portage.versions.cpv_getkey(cpv) + if matched_cp == orig_atom.cp: provide_suffix = "" else: provide_suffix = " (%s)" % (orig_atom,) - versions.append( - _info_pkgs_ver(ver, repo_suffix, provide_suffix)) - - versions.sort() + ver_map[ver] = _info_pkgs_ver(ver, repo_suffix, provide_suffix) - if versions: - versions = ", ".join(ver.toString() for ver in versions) - writemsg_stdout("%-20s %s\n" % (x+":", versions), - noiselevel=-1) + for cp in sorted(cp_map): + versions = sorted(cp_map[cp].values()) + versions = ", ".join(ver.toString() for ver in versions) + writemsg_stdout("%s %s\n" % \ + ((cp + ":").ljust(cp_max_len + 1), versions), + noiselevel=-1) libtool_vers = ",".join(trees["/"]["vartree"].dbapi.match("sys-devel/libtool")) |