From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id DEC00198005 for ; Mon, 18 Mar 2013 06:27:13 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C76A0E027D; Mon, 18 Mar 2013 06:27:08 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 46F60E027D for ; Mon, 18 Mar 2013 06:27:08 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 22B3633C3B4 for ; Mon, 18 Mar 2013 06:27:07 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id AEAD7E4073 for ; Mon, 18 Mar 2013 06:27:05 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <1363588013.994f497d524bd814471cf6bec4d0fb44938204d9.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: bin/ X-VCS-Repository: proj/portage X-VCS-Files: bin/portageq X-VCS-Directories: bin/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 994f497d524bd814471cf6bec4d0fb44938204d9 X-VCS-Branch: master Date: Mon, 18 Mar 2013 06:27:05 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 7efd189e-4716-4e1a-9a4f-536b0c73ab11 X-Archives-Hash: 461f1f771f9ae912b31bd63507643ad3 commit: 994f497d524bd814471cf6bec4d0fb44938204d9 Author: Zac Medico gentoo org> AuthorDate: Mon Mar 18 06:26:53 2013 +0000 Commit: Zac Medico gentoo org> CommitDate: Mon Mar 18 06:26:53 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=994f497d portageq: support atoms for pquery mode --- bin/portageq | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 77 insertions(+), 12 deletions(-) diff --git a/bin/portageq b/bin/portageq index d482772..f91ec81 100755 --- a/bin/portageq +++ b/bin/portageq @@ -46,6 +46,7 @@ portage.proxy.lazyimport.lazyimport(globals(), 'subprocess', '_emerge.Package:Package', '_emerge.RootConfig:RootConfig', + '_emerge.is_valid_package_atom:insert_category_into_atom', 'portage.dbapi._expand_new_virt:expand_new_virt', 'portage._sets.base:InternalPackageSet', 'portage.xml.metadata:MetaDataXML' @@ -962,6 +963,40 @@ class HerdMatcher(object): def pquery(parser, pquery_option_groups, opts, args): + portdb = portage.db[portage.root]['porttree'].dbapi + + need_metadata = False + extended_syntax = False + atoms = [] + for arg in args: + if "/" not in arg.split(":")[0]: + atom = insert_category_into_atom(arg, '*') + if atom is None: + writemsg("ERROR: Invalid atom: '%s'\n" % arg, + noiselevel=-1) + return 2 + else: + atom = arg + + try: + atom = portage.dep.Atom(atom, allow_wildcard=True, allow_repo=True) + except portage.exception.InvalidAtom: + writemsg("ERROR: Invalid atom: '%s'\n" % arg, + noiselevel=-1) + return 2 + + if atom.slot is not None: + need_metadata = True + if atom.extended_syntax: + extended_syntax = True + + atoms.append(atom) + + if "*/*" in atoms: + del atoms[:] + need_metadata = False + extended_syntax = False + xml_matchers = [] if opts.maintainer_email: maintainer_emails = [] @@ -974,8 +1009,6 @@ def pquery(parser, pquery_option_groups, opts, args): herds.extend(x.split(",")) xml_matchers.append(HerdMatcher(herds)) - portdb = portage.db[portage.root]['porttree'].dbapi - repos = [] if opts.all_repos: repos.extend(portdb.repositories.get_repo_for_location(location) @@ -985,8 +1018,27 @@ def pquery(parser, pquery_option_groups, opts, args): else: repos.append(portdb.repositories.mainRepo()) - for category in sorted(portdb.categories): - for cp in portdb.cp_all(categories=(category,)): + if extended_syntax or not atoms: + names = None + categories = list(portdb.categories) + else: + categories = [] + names = [] + for atom in atoms: + category, name = portage.catsplit(atom.cp) + categories.append(category) + names.append(name) + categories = list(set(categories)) + names = sorted(set(names)) + + categories.sort() + + for category in categories: + if names is None: + cp_list = portdb.cp_all(categories=(category,)) + else: + cp_list = [category + "/" + name for name in names] + for cp in cp_list: matches = [] for repo in repos: match = True @@ -1005,7 +1057,22 @@ def pquery(parser, pquery_option_groups, opts, args): if not match: continue cpv_list = portdb.cp_list(cp, mytree=[repo.location]) - matches.extend(cpv_list) + if atoms: + for cpv in cpv_list: + for atom in atoms: + if atom.repo is not None and \ + atom.repo != repo.name: + continue + if not portage.match_from_list(atom, [cpv]): + continue + if need_metadata: + cpv = portdb._pkg_str(cpv, repo.name) + if not portage.match_from_list(atom, [cpv]): + continue + matches.append(cpv) + break + else: + matches.extend(cpv_list) if not matches: continue @@ -1071,8 +1138,11 @@ def main(argv): print("Portage", portage.VERSION) return os.EX_OK - if (opts.herd is not None or - opts.maintainer_email is not None): + cmd = None + if args and args[0] in commands: + cmd = args[0] + + if cmd is None: return pquery(parser, pquery_option_groups, opts, args) argv = argv[:1] + args @@ -1081,11 +1151,6 @@ def main(argv): usage(argv) sys.exit(os.EX_USAGE) - cmd = argv[1] - function = globals().get(cmd) - if function is None or cmd not in commands: - usage(argv) - sys.exit(os.EX_USAGE) function = globals()[cmd] uses_eroot = getattr(function, "uses_eroot", False) and len(argv) > 2 if uses_eroot: