aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Lecher <jlec@gentoo.org>2015-11-19 12:56:32 +0100
committerJustin Lecher <jlec@gentoo.org>2015-11-19 12:56:32 +0100
commit239b0c9b6ea62189f6ce69f72a291a4f8c9fa463 (patch)
tree1e72210d01dd72199d375d736ffa765f16d89e3c
parentAdd eapi column to the eshowkw (diff)
downloadgentoolkit-239b0c9b6ea62189f6ce69f72a291a4f8c9fa463.tar.gz
gentoolkit-239b0c9b6ea62189f6ce69f72a291a4f8c9fa463.tar.bz2
gentoolkit-239b0c9b6ea62189f6ce69f72a291a4f8c9fa463.zip
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 <jlec@gentoo.org>
-rw-r--r--pym/gentoolkit/eshowkw/keywords_header.py76
1 files 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)