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 2F6C91384B4 for ; Thu, 19 Nov 2015 11:59:23 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 647AA21C015; Thu, 19 Nov 2015 11:59:20 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id ED41221C015 for ; Thu, 19 Nov 2015 11:59:19 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 82BDA340691 for ; Thu, 19 Nov 2015 11:59:18 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 47F42A96 for ; Thu, 19 Nov 2015 11:59:16 +0000 (UTC) From: "Justin Lecher" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Justin Lecher" Message-ID: <1447934192.239b0c9b6ea62189f6ce69f72a291a4f8c9fa463.jlec@gentoo> Subject: [gentoo-commits] proj/gentoolkit:master commit in: pym/gentoolkit/eshowkw/ X-VCS-Repository: proj/gentoolkit X-VCS-Files: pym/gentoolkit/eshowkw/keywords_header.py X-VCS-Directories: pym/gentoolkit/eshowkw/ X-VCS-Committer: jlec X-VCS-Committer-Name: Justin Lecher X-VCS-Revision: 239b0c9b6ea62189f6ce69f72a291a4f8c9fa463 X-VCS-Branch: master Date: Thu, 19 Nov 2015 11:59:16 +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: 63ffa681-4ecb-400a-9353-c11632e614df X-Archives-Hash: c9637bf9e639ec9d013f4ab6ba1a4f87 commit: 239b0c9b6ea62189f6ce69f72a291a4f8c9fa463 Author: Justin Lecher gentoo org> AuthorDate: Thu Nov 19 11:56:32 2015 +0000 Commit: Justin Lecher gentoo org> CommitDate: Thu Nov 19 11:56:32 2015 +0000 URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=239b0c9b Get status of arch from profile The stable, dev, exp status of the arches was hardcoded. This change copies the code form ekeyword to read the status from profiles directly. Signed-off-by: Justin Lecher gentoo.org> pym/gentoolkit/eshowkw/keywords_header.py | 76 +++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/pym/gentoolkit/eshowkw/keywords_header.py b/pym/gentoolkit/eshowkw/keywords_header.py index 320406e..aaf1e8c 100644 --- a/pym/gentoolkit/eshowkw/keywords_header.py +++ b/pym/gentoolkit/eshowkw/keywords_header.py @@ -4,14 +4,84 @@ __all__ = ['keywords_header'] +import portage +import os from portage import settings as ports from portage.output import colorize from gentoolkit.eshowkw.display_pretty import colorize_string from gentoolkit.eshowkw.display_pretty import align_string +# Copied from ekeyword +def load_profile_data(portdir=None, repo='gentoo'): + """Load the list of known arches from the tree + + Args: + portdir: The repository to load all data from (and ignore |repo|) + repo: Look up this repository by name to locate profile data + + Returns: + A dict mapping the keyword to its preferred state: + {'x86': 'stable', 'mips': 'dev', ...} + """ + if portdir is None: + portdir = portage.db['/']['vartree'].settings.repositories[repo].location + + arch_status = {} + + try: + arch_list = os.path.join(portdir, 'profiles', 'arch.list') + with open(arch_list) as f: + for line in f: + line = line.split('#', 1)[0].strip() + if line: + arch_status[line] = None + except IOError: + pass + + try: + profile_status = { + 'stable': 0, + 'dev': 1, + 'exp': 2, + None: 3, + } + profiles_list = os.path.join(portdir, 'profiles', 'profiles.desc') + with open(profiles_list) as f: + for line in f: + line = line.split('#', 1)[0].split() + if line: + arch, _profile, status = line + arch_status.setdefault(arch, status) + curr_status = profile_status[arch_status[arch]] + new_status = profile_status[status] + if new_status < curr_status: + arch_status[arch] = status + except IOError: + pass + + if arch_status: + arch_status['all'] = None + else: + warning('could not read profile files: %s' % arch_list) + warning('will not be able to verify args are correct') + + return arch_status + +def gen_arch_list(status): + _arch_status = load_profile_data() + if status == "stable": + return [arch for arch in _arch_status if _arch_status[arch] == "stable"] + elif status == "dev": + return [arch for arch in _arch_status if _arch_status[arch] == "dev"] + elif status == "exp": + return [arch for arch in _arch_status if _arch_status[arch] == "exp"] + else: + raise TypeError + class keywords_header: - __IMPARCHS = [ 'arm', 'amd64', 'x86' ] - __UNSTABLE_ARCHS = [ 'arm64', 'm68k', 'mips', 's390', 'sh' ] + __IMPARCHS = gen_arch_list("stable") + __DEV_ARCHS = gen_arch_list("dev") + __EXP_ARCHS = gen_arch_list("exp") __ADDITIONAL_FIELDS = [ 'eapi', 'unused', 'slot' ] __EXTRA_FIELDS = [ 'repo' ] @@ -61,7 +131,7 @@ class keywords_header: keyword = '%'.join(list(keyword)) if tmp2 in self.__IMPARCHS: tmp.append(colorize_string('darkyellow', keyword)) - elif tmp2 in self.__UNSTABLE_ARCHS: + elif tmp2 in self.__EXP_ARCHS: tmp.append(colorize_string('darkgray', keyword)) else: tmp.append(keyword)