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 1Sc1Zu-0004tK-W0 for garchives@archives.gentoo.org; Tue, 05 Jun 2012 21:46:15 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A5AE5E0477; Tue, 5 Jun 2012 21:46:07 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 617A9E0477 for ; Tue, 5 Jun 2012 21:46:07 +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 74DFD1B401F for ; Tue, 5 Jun 2012 21:46:06 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 3C755E5404 for ; Tue, 5 Jun 2012 21:46:05 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1338932757.d986533d1aee9e79a33da4aeac2508fc946e69e0.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/libs/porttree.py gpackages/libs/use_info.py X-VCS-Directories: gpackages/libs/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: d986533d1aee9e79a33da4aeac2508fc946e69e0 X-VCS-Branch: master Date: Tue, 5 Jun 2012 21:46: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 Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 158e5351-a87f-4524-b205-e18beb5cd350 X-Archives-Hash: 793236aab77d3ff1be8dc037e32a4679 commit: d986533d1aee9e79a33da4aeac2508fc946e69e0 Author: Slava Bacherikov bacher09 org> AuthorDate: Tue Jun 5 21:45:57 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Tue Jun 5 21:45:57 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Dd986533d Changes in layer over portage --- gpackages/libs/porttree.py | 62 ++++++++++++++++++++++++++++++++++++++= ++--- gpackages/libs/use_info.py | 2 + 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py index fe2c9cf..5a4da3a 100644 --- a/gpackages/libs/porttree.py +++ b/gpackages/libs/porttree.py @@ -7,6 +7,7 @@ from portage.exception import PortageException, FileNotFo= und, InvalidAtom, \ from gentoolkit.package import Package as PackageInfo from gentoolkit.metadata import MetaData from generic import ToStrMixin, file_sha1, file_mtime, cached_property +from use_info import get_uses_info, get_local_uses_info import os =20 BINDB =3D portage.db[portage.root]["bintree"].dbapi @@ -33,6 +34,13 @@ def _ebuild_environment(name): return lambda self: self.package_object.environment(name) =20 =20 +def _get_info_by_func(func, path1, path2): + path =3D os.path.join(path1, path2) + try: + return func(path) + except IOError: + return None + class Use(ToStrMixin): "Represend Use flag as object" __slots__ =3D ('name',) @@ -89,27 +97,59 @@ class Keyword(ToStrMixin): "Return arch name" return self.name =20 +def _gen_all_use(func, iterator): + use_g =3D iterator + use_all_dict =3D next(use_g) + for use_dict in use_g: + if use_dict is not None: + func(use_all_dict, use_dict) + return use_all_dict =20 class Portage(object): =20 def iter_trees(self): - for tree in PORTDB.porttrees: - yield PortTree(tree) + tree_dict =3D PORTDB.repositories.treemap + for tree_name in PORTDB.repositories.prepos_order: + yield PortTree(tree_dict[tree_name], tree_name) + + def iter_packages(): + for tree in self.iter_trees(): + for package in tree.iter_package(): + yield package =20 def iter_ebuilds(): for tree in self.iter_trees(): for ebuild in tree.iter_ebuilds(): yield ebuild =20 + def iter_use_desc(self): + for tree in self.iter_trees(): + yield tree.use_desc + + def iter_use_local_desc(self): + for tree in self.iter_trees(): + yield tree.use_local_desc + + def get_all_use_desc(self): + return _gen_all_use(lambda x,y: x.update(y), self.iter_use_desc(= )) + + def get_all_use_local_desc(self): + def action(all_dict, use_dict): + for key, value in use_dict.iteritems(): + all_dict[key].update(value) + + return _gen_all_use(action, self.iter_use_local_desc()) + =20 class PortTree(ToStrMixin): "Represent portage tree as object" =20 - def __init__(self, porttree =3D '/usr/portage'): + def __init__(self, tree_path =3D '/usr/portage', name =3D 'main'): """Args: - porttree -- full path to portage tree as str + tree_path -- full path to portage tree as str """ - self.porttree =3D porttree # TODO: it should be read-only + self.porttree =3D tree_path + self.name =3D name =20 def iter_categories(self): for category in sorted(PORTDB.settings.categories): @@ -134,6 +174,18 @@ class PortTree(ToStrMixin): "Full path to portage tree" return self.porttree =20 + @cached_property + def use_desc(self): + return _get_info_by_func(get_uses_info, + self.porttree_path, + 'profiles/use.desc') + + @cached_property + def use_local_desc(self): + return _get_info_by_func(get_local_uses_info, + self.porttree_path, + 'profiles/use.local.desc') + =20 class Category(ToStrMixin): "Represent category of portage tree as object" diff --git a/gpackages/libs/use_info.py b/gpackages/libs/use_info.py index b45cda7..c89dfe6 100644 --- a/gpackages/libs/use_info.py +++ b/gpackages/libs/use_info.py @@ -1,6 +1,8 @@ import re from collections import defaultdict =20 +__all__ =3D ('get_uses_info', 'get_local_uses_info') + USES_RE =3D r'(?P[^#].*) - (?P.*)' USES_DESC_RE =3D r'^%s$' % USES_RE USES_LOCAL_DESC_RE =3D r'^(?P[^#].*):%s$' % USES_RE