From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QEor9-0004a1-Rl for garchives@archives.gentoo.org; Tue, 26 Apr 2011 20:27:36 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 5EFD11C0CF; Tue, 26 Apr 2011 20:27:28 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 0851E1C0CF for ; Tue, 26 Apr 2011 20:27:27 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 4A15B1B401F for ; Tue, 26 Apr 2011 20:27:27 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 730A180505 for ; Tue, 26 Apr 2011 20:27:26 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <71fe8dac63a91b0fc8ca425ac2068a80b726a32f.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/actions.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 71fe8dac63a91b0fc8ca425ac2068a80b726a32f Date: Tue, 26 Apr 2011 20:27:26 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: c6526e8b9b012f2844341b2dfbdfacd6 commit: 71fe8dac63a91b0fc8ca425ac2068a80b726a32f Author: Zac Medico gentoo org> AuthorDate: Tue Apr 26 20:19:34 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Tue Apr 26 20:19:34 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D71fe8dac 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 53d1880..43707d2 100644 --- a/pym/_emerge/actions.py +++ b/pym/_emerge/actions.py @@ -1289,6 +1289,40 @@ def action_deselect(settings, trees, opts, atoms): world_set.unlock() return os.EX_OK =20 +def expand_new_virt(vardb, atom, _traversed=3DNone): + """ + 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 =3D vardb.match(atom) + if not (matches and portage.cpv_getkey(matches[-1]).startswith("virtual= /")): + yield atom + return + + virt_cpv =3D matches[-1] + rdepend, use =3D vardb.aux_get(virt_cpv, ["RDEPEND", "USE"]) + use =3D frozenset(use.split()) + success, atoms =3D portage.dep_check(rdepend, + None, vardb.settings, myuse=3Duse, + myroot=3Dvardb.root, trees=3D{vardb.root:{"porttree":vardb.vartree, + "vartree":vardb.vartree}}) + + if not success: + yield atom + return + + if _traversed is None: + _traversed =3D set([atom]) + + for child1 in atoms: + if child1 not in _traversed: + _traversed.add(child1) + for child2 in expand_new_virt(vardb, child1, + _traversed=3D_traversed): + yield child2 + class _info_pkgs_ver(object): def __init__(self, ver, repo_suffix, provide_suffix): self.ver =3D ver @@ -1349,15 +1383,25 @@ def action_info(settings, trees, myopts, myfiles)= : myvars =3D ["sys-devel/autoconf", "sys-devel/automake", "virtual/os-he= aders", "sys-devel/binutils", "sys-devel/libtool", "dev-lang/python= "] myvars +=3D portage.util.grabfile(settings["PORTDIR"]+"/profiles/info_p= kgs") - myvars =3D portage.util.unique_array(myvars) - myvars.sort() + atoms =3D [] + vardb =3D trees["/"]["vartree"].dbapi + for x in myvars: + try: + x =3D Atom(x) + except InvalidAtom: + writemsg_stdout("%-20s %s\n" % (x+":", "[NOT VALID]"), + noiselevel=3D-1) + else: + for atom in expand_new_virt(vardb, x): + if not atom.blocker: + atoms.append((x, atom)) + + myvars =3D sorted(set(atoms)) =20 portdb =3D trees["/"]["porttree"].dbapi - vardb =3D trees["/"]["vartree"].dbapi main_repo =3D portdb.getRepositoryName(portdb.porttree_root) =20 - for x in myvars: - if portage.isvalidatom(x): + for orig_atom, x in myvars: pkg_matches =3D vardb.match(x) =20 versions =3D [] @@ -1372,10 +1416,10 @@ def action_info(settings, trees, myopts, myfiles)= : repo_suffix =3D "::" + repo =09 matched_cp =3D portage.versions.cpv_getkey(cpv) - if matched_cp =3D=3D x: + if matched_cp =3D=3D orig_atom.cp: provide_suffix =3D "" else: - provide_suffix =3D " (%s)" % matched_cp + provide_suffix =3D " (%s)" % (orig_atom,) =20 versions.append( _info_pkgs_ver(ver, repo_suffix, provide_suffix)) @@ -1386,9 +1430,6 @@ def action_info(settings, trees, myopts, myfiles): versions =3D ", ".join(ver.toString() for ver in versions) writemsg_stdout("%-20s %s\n" % (x+":", versions), noiselevel=3D-1) - else: - writemsg_stdout("%-20s %s\n" % (x+":", "[NOT VALID]"), - noiselevel=3D-1) =20 libtool_vers =3D ",".join(trees["/"]["vartree"].dbapi.match("sys-devel/= libtool")) =20 @@ -2788,24 +2829,22 @@ def getportageversion(portdir, target_root, profi= le, chost, vardb): if profilever is None: profilever =3D "unavailable" =20 - libcver=3D[] - libclist =3D vardb.match("virtual/libc") - libclist +=3D vardb.match("virtual/glibc") - libclist =3D portage.util.unique_array(libclist) - for x in libclist: - xs=3Dportage.catpkgsplit(x) - if libcver: - libcver+=3D","+"-".join(xs[1:]) - else: - libcver=3D"-".join(xs[1:]) - if libcver=3D=3D[]: - libcver=3D"unavailable" + libcver =3D [] + libclist =3D 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 =3D ["unavailable"] =20 gccver =3D getgccversion(chost) unameout=3Dplatform.release()+" "+platform.machine() =20 return "Portage %s (%s, %s, %s, %s)" % \ - (portage.VERSION, profilever, gccver, libcver, unameout) + (portage.VERSION, profilever, gccver, ",".join(libcver), unameout) =20 def git_sync_timestamps(settings, portdir): """