summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-04-29 08:04:13 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-04 12:37:57 -0700
commit5a26bb626213d5db94c1b9c2121f3d8b838c3d7d (patch)
treed50431022659224d8ce7f91b7551d8d1db074ef7 /pym
parenta841472cea6bf13abc9bf653fbb2ee884e2266f2 (diff)
downloadportage-5a26bb626213d5db94c1b9c2121f3d8b838c3d7d.tar.gz
portage-5a26bb626213d5db94c1b9c2121f3d8b838c3d7d.tar.bz2
portage-5a26bb626213d5db94c1b9c2121f3d8b838c3d7d.zip
action_info: eliminate duplicate info_pkgs match
Currently, sys-kernel/linux-headers is matched by both a plain sys-kernel/linux-headers atom and by the virtual/os-headers new-style virtual. For backward compatibility, we're going to have duplicates like this for at least a few months (see bug #364673, comment #5). Therefore, automatically eliminate duplicates in the display. Entries that include virtual provider info are preferred over those that do not.
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/actions.py31
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"))