commit: 95b5655ae01c0185a9539d1921509277fa778102 Author: Denis Romanchuk <den4ikkss <AT> gmail <DOT> com> AuthorDate: Mon Nov 16 04:01:21 2015 +0000 Commit: Justin Lecher <jlec <AT> gentoo <DOT> org> CommitDate: Tue Nov 17 10:18:17 2015 +0000 URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=95b5655a
Add eapi column to the eshowkw Signed-off-by: Justin Lecher <jlec <AT> gentoo.org> pym/gentoolkit/eshowkw/__init__.py | 5 +--- pym/gentoolkit/eshowkw/keywords_content.py | 42 ++++++++++++++++++++++-------- pym/gentoolkit/eshowkw/keywords_header.py | 2 +- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/pym/gentoolkit/eshowkw/__init__.py b/pym/gentoolkit/eshowkw/__init__.py index a20dac9..d46a773 100644 --- a/pym/gentoolkit/eshowkw/__init__.py +++ b/pym/gentoolkit/eshowkw/__init__.py @@ -72,7 +72,7 @@ def process_args(argv): parser.add_argument('-P', '--prefix', action='store_true', default=False, help='Display prefix keywords in output.') parser.add_argument('-S', '--ignore-slot', action='store_true', default=False, - help='Treat slots as irelevant during detection of redundant pacakges.') + help='Treat slots as irelevant during detection of redundant packages.') return parser.parse_args(args=argv) @@ -83,9 +83,6 @@ def main(argv, indirect = False): opts = process_args(argv) ignore_slots = opts.ignore_slot use_overlays = opts.overlays - # user can do both --arch=a,b,c or --arch a b c - if len(opts.arch) > 1: - opts.arch = ','.join(opts.arch) highlight_arch = ''.join(opts.arch).split(',') bold = opts.bold order = opts.align diff --git a/pym/gentoolkit/eshowkw/keywords_content.py b/pym/gentoolkit/eshowkw/keywords_content.py index 2e6c0fa..b6ad118 100644 --- a/pym/gentoolkit/eshowkw/keywords_content.py +++ b/pym/gentoolkit/eshowkw/keywords_content.py @@ -164,7 +164,7 @@ class keywords_content: def __packages_sort(package_content): """ Sort packages queried based on version and slot - %% pn , repo, slot, keywords + %% pn , repo, slot, eapi, keywords """ from operator import itemgetter @@ -208,8 +208,8 @@ class keywords_content: # version is not allowed by portage or unset continue # obtain related data from metadata and append to the pkg list - keywords, slot = self.__getMetadata(pdb, mysplit[0]+'/'+pf, oroot) - mypkgs.append([mysplit[0]+'/'+pf, oroot, slot, keywords]) + keywords, slot, eapi = self.__getMetadata(pdb, mysplit[0]+'/'+pf, oroot) + mypkgs.append([mysplit[0]+'/'+pf, oroot, slot, eapi, keywords]) self.__packages_sort(mypkgs) return mypkgs @@ -226,7 +226,7 @@ class keywords_content: def __getMetadata(pdb, package, repo): """Obtain all required metadata from portage auxdb""" try: - metadata = pdb.aux_get(package, ['KEYWORDS', 'SLOT'], repo) + metadata = pdb.aux_get(package, ['KEYWORDS', 'SLOT', 'EAPI'], repo) except KeyError: # portage prints out more verbose error for us if we were lucky raise SystemExit('Failed to obtain metadata') @@ -303,24 +303,42 @@ class keywords_content: return tmp @staticmethod - def __prepareContentResult(versions, keywords, redundant, slots, slot_length, repos, linesep): + def __formatEapis(eapis, repos, repos_configs, length): + """Align eapis items properly""" + # % are used as separators for further split so we wont loose spaces and coloring + tmp = [] + for eapi, repo in zip(eapis, repos): + tmp_eapi = eapi + eapi = align_string(eapi, 'left', length) + eapi = '%'.join(list(eapi)) + if repos_configs[repo].eapi_is_banned(tmp_eapi): + eapi = colorize_string('red', eapi) + elif repos_configs[repo].eapi_is_deprecated(tmp_eapi): + eapi = colorize_string('yellow', eapi) + else: + eapi = colorize_string('green', eapi) + tmp.append(eapi) + return tmp + + @staticmethod + def __prepareContentResult(versions, keywords, eapi, redundant, slots, slot_length, repos, linesep): """Parse version fields into one list with proper separators""" content = [] oldslot = '' fieldsep = '% %|% %' normsep = '% %' - for v, k, r, s, t in zip(versions, keywords, redundant, slots, repos): + for v, k, e, r, s, t in zip(versions, keywords, eapi, redundant, slots, repos): if oldslot != s: oldslot = s content.append(linesep) else: s = '%'.join(list(''.rjust(slot_length))) - content.append('%s%s%s%s%s%s%s%s%s' % (v, fieldsep, k, fieldsep, r, normsep, s, fieldsep, t)) + content.append('%s%s%s%s%s%s%s%s%s%s%s' % (v, fieldsep, k, fieldsep, e, normsep, r, normsep, s, fieldsep, t)) return content def __init__(self, package, keywords_list, porttree, ignoreslots = False, content_align = 'bottom', usebold = False, toplist = 'archlist'): """Query all relevant data from portage databases.""" - packages, self.repositories, self.slots, self.keywords = self.__checkExist(porttree, package) + packages, self.repositories, self.slots, self.eapi, self.keywords = self.__checkExist(porttree, package) # convert repositories from path to name self.repositories = [porttree.getRepositoryName(x) for x in self.repositories] self.slot_length = max([len(x) for x in self.slots]) @@ -336,16 +354,18 @@ class keywords_content: ver = self.__formatVersions(self.versions, content_align, self.version_length) kws = self.__formatKeywords(self.keywords, keywords_list, usebold, toplist) + repos_configs = porttree.repositories.prepos + eap = self.__formatEapis(self.eapi, self.repositories, repos_configs, 1) red = self.__formatAdditional(self.redundant, 'purple', redundant_length) slt = self.__formatAdditional(self.slots, 'bold', self.slot_length) rep = self.__formatAdditional(self.repositories, 'yellow', repositories_length) - # those + nubers are spaces in printout. keywords are multiplied also because of that + # those + numbers are spaces in printout. keywords are multiplied also because of that linesep = '%s+%s+%s+%s' % (''.ljust(self.version_length+1, '-'), ''.ljust(self.keyword_length*2+1, '-'), - ''.ljust(redundant_length+self.slot_length+3, '-'), + ''.ljust(redundant_length+self.slot_length+1+4, '-'), ''.ljust(repositories_length+1, '-') ) - self.content = self.__prepareContentResult(ver, kws, red, slt, self.slot_length, rep, linesep) + self.content = self.__prepareContentResult(ver, kws, eap, red, slt, self.slot_length, rep, linesep) self.content_length = len(linesep) self.cp = port.cpv_getkey(packages[0]) diff --git a/pym/gentoolkit/eshowkw/keywords_header.py b/pym/gentoolkit/eshowkw/keywords_header.py index 610fcaf..320406e 100644 --- a/pym/gentoolkit/eshowkw/keywords_header.py +++ b/pym/gentoolkit/eshowkw/keywords_header.py @@ -12,7 +12,7 @@ from gentoolkit.eshowkw.display_pretty import align_string class keywords_header: __IMPARCHS = [ 'arm', 'amd64', 'x86' ] __UNSTABLE_ARCHS = [ 'arm64', 'm68k', 'mips', 's390', 'sh' ] - __ADDITIONAL_FIELDS = [ 'unused', 'slot' ] + __ADDITIONAL_FIELDS = [ 'eapi', 'unused', 'slot' ] __EXTRA_FIELDS = [ 'repo' ] @staticmethod