diff options
author | Justin Lecher <jlec@gentoo.org> | 2015-11-19 12:56:32 +0100 |
---|---|---|
committer | Justin Lecher <jlec@gentoo.org> | 2015-11-19 12:56:32 +0100 |
commit | 239b0c9b6ea62189f6ce69f72a291a4f8c9fa463 (patch) | |
tree | 1e72210d01dd72199d375d736ffa765f16d89e3c | |
parent | Add eapi column to the eshowkw (diff) | |
download | gentoolkit-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.py | 76 |
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) |