From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:2.1.9 commit in: pym/_emerge/
Date: Wed, 4 May 2011 20:03:28 +0000 (UTC) [thread overview]
Message-ID: <fb6a41d0a48a3fd5f7d7cb805b73235dde0fb331.zmedico@gentoo> (raw)
commit: fb6a41d0a48a3fd5f7d7cb805b73235dde0fb331
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 26 20:19:34 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed May 4 19:26:27 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=fb6a41d0
emerge --info: support new-style virtuals
This will fix bug #364673.
---
pym/_emerge/actions.py | 85 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 62 insertions(+), 23 deletions(-)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 865c683..d2b35d5 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1288,6 +1288,40 @@ def action_deselect(settings, trees, opts, atoms):
world_set.unlock()
return os.EX_OK
+def expand_new_virt(vardb, atom, _traversed=None):
+ """
+ Iterate over the recursively expanded RDEPEND atoms of
+ s new-style virtual. If atom is not a new-style virtual
+ or it does not match an installed package then it is
+ yielded without any expansion.
+ """
+ matches = vardb.match(atom)
+ if not (matches and portage.cpv_getkey(matches[-1]).startswith("virtual/")):
+ yield atom
+ return
+
+ virt_cpv = matches[-1]
+ rdepend, use = vardb.aux_get(virt_cpv, ["RDEPEND", "USE"])
+ use = frozenset(use.split())
+ success, atoms = portage.dep_check(rdepend,
+ None, vardb.settings, myuse=use,
+ myroot=vardb.root, trees={vardb.root:{"porttree":vardb.vartree,
+ "vartree":vardb.vartree}})
+
+ if not success:
+ yield atom
+ return
+
+ if _traversed is None:
+ _traversed = set([atom])
+
+ for child1 in atoms:
+ if child1 not in _traversed:
+ _traversed.add(child1)
+ for child2 in expand_new_virt(vardb, child1,
+ _traversed=_traversed):
+ yield child2
+
class _info_pkgs_ver(object):
def __init__(self, ver, repo_suffix, provide_suffix):
self.ver = ver
@@ -1344,15 +1378,25 @@ def action_info(settings, trees, myopts, myfiles):
myvars = ["sys-devel/autoconf", "sys-devel/automake", "virtual/os-headers",
"sys-devel/binutils", "sys-devel/libtool", "dev-lang/python"]
myvars += portage.util.grabfile(settings["PORTDIR"]+"/profiles/info_pkgs")
- myvars = portage.util.unique_array(myvars)
- myvars.sort()
+ atoms = []
+ vardb = trees["/"]["vartree"].dbapi
+ for x in myvars:
+ try:
+ x = Atom(x)
+ except InvalidAtom:
+ writemsg_stdout("%-20s %s\n" % (x+":", "[NOT VALID]"),
+ noiselevel=-1)
+ else:
+ for atom in expand_new_virt(vardb, x):
+ if not atom.blocker:
+ atoms.append((x, atom))
+
+ myvars = sorted(set(atoms))
portdb = trees["/"]["porttree"].dbapi
- vardb = trees["/"]["vartree"].dbapi
main_repo = portdb.getRepositoryName(portdb.porttree_root)
- for x in myvars:
- if portage.isvalidatom(x):
+ for orig_atom, x in myvars:
pkg_matches = vardb.match(x)
versions = []
@@ -1367,10 +1411,10 @@ def action_info(settings, trees, myopts, myfiles):
repo_suffix = "::" + repo
matched_cp = portage.versions.cpv_getkey(cpv)
- if matched_cp == x:
+ if matched_cp == orig_atom.cp:
provide_suffix = ""
else:
- provide_suffix = " (%s)" % matched_cp
+ provide_suffix = " (%s)" % (orig_atom,)
versions.append(
_info_pkgs_ver(ver, repo_suffix, provide_suffix))
@@ -1381,9 +1425,6 @@ def action_info(settings, trees, myopts, myfiles):
versions = ", ".join(ver.toString() for ver in versions)
writemsg_stdout("%-20s %s\n" % (x+":", versions),
noiselevel=-1)
- else:
- writemsg_stdout("%-20s %s\n" % (x+":", "[NOT VALID]"),
- noiselevel=-1)
libtool_vers = ",".join(trees["/"]["vartree"].dbapi.match("sys-devel/libtool"))
@@ -2767,24 +2808,22 @@ def getportageversion(portdir, target_root, profile, chost, vardb):
if profilever is None:
profilever = "unavailable"
- libcver=[]
- libclist = vardb.match("virtual/libc")
- libclist += vardb.match("virtual/glibc")
- libclist = portage.util.unique_array(libclist)
- for x in libclist:
- xs=portage.catpkgsplit(x)
- if libcver:
- libcver+=","+"-".join(xs[1:])
- else:
- libcver="-".join(xs[1:])
- if libcver==[]:
- libcver="unavailable"
+ libcver = []
+ libclist = set()
+ for atom in expand_new_virt(vardb, portage.const.LIBC_PACKAGE_ATOM):
+ if not atom.blocker:
+ libclist.update(vardb.match(atom))
+ if libclist:
+ for cpv in sorted(libclist):
+ libcver.append("-".join(portage.catpkgsplit(cpv)[1:]))
+ else:
+ libcver = ["unavailable"]
gccver = getgccversion(chost)
unameout=platform.release()+" "+platform.machine()
return "Portage %s (%s, %s, %s, %s)" % \
- (portage.VERSION, profilever, gccver, libcver, unameout)
+ (portage.VERSION, profilever, gccver, ",".join(libcver), unameout)
def git_sync_timestamps(settings, portdir):
"""
next reply other threads:[~2011-05-04 20:04 UTC|newest]
Thread overview: 136+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-04 20:03 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-05-27 3:36 [gentoo-commits] proj/portage:2.1.9 commit in: pym/_emerge/ Zac Medico
2011-05-27 1:26 Zac Medico
2011-05-27 0:40 Zac Medico
2011-05-26 22:34 Zac Medico
2011-05-26 21:37 Zac Medico
2011-05-26 13:04 Zac Medico
2011-05-26 12:52 Zac Medico
2011-05-26 12:26 Zac Medico
2011-05-26 12:05 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-26 6:18 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-12 5:24 Zac Medico
2011-05-08 20:50 Zac Medico
2011-05-08 20:50 Zac Medico
2011-05-08 20:50 Zac Medico
2011-05-08 20:50 Zac Medico
2011-05-08 20:50 Zac Medico
2011-05-05 18:12 Zac Medico
2011-05-05 16:01 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-05-04 20:03 Zac Medico
2011-04-13 7:52 Zac Medico
2011-04-13 7:52 Zac Medico
2011-04-13 7:52 Zac Medico
2011-04-13 7:52 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-26 19:31 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-18 21:12 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-14 16:24 Zac Medico
2011-03-01 21:54 Zac Medico
2011-03-01 20:55 Zac Medico
2011-03-01 20:55 Zac Medico
2011-03-01 20:55 Zac Medico
2011-02-22 17:41 Zac Medico
2011-02-22 3:16 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-22 3:14 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-20 0:04 Zac Medico
2011-02-14 17:02 Zac Medico
2011-02-14 16:45 Zac Medico
2011-02-14 16:35 Zac Medico
2011-02-14 16:04 Zac Medico
2011-02-14 7:49 Zac Medico
2011-02-14 7:49 Zac Medico
2011-02-14 7:49 Zac Medico
2011-02-14 7:49 Zac Medico
2011-02-14 7:49 Zac Medico
2011-02-14 5:04 Zac Medico
2011-02-14 4:31 Zac Medico
2011-02-14 4:31 Zac Medico
2011-02-14 4:31 Zac Medico
2011-02-14 4:31 Zac Medico
2011-02-14 4:31 Zac Medico
2011-02-08 20:48 Zac Medico
2011-02-05 3:37 Zac Medico
2011-02-04 17:47 zmedico
2011-02-04 15:57 zmedico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fb6a41d0a48a3fd5f7d7cb805b73235dde0fb331.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox